List sort()自定义排序 痛定思痛。 2022-09-16 05:58 148阅读 0赞 # 前言 # * 本文使用环境为JDK8 * sort()方法底层采用归并排序,时间复杂度为O(nlgn),空间复杂度为O(n),感兴趣的同学自行查阅源码,本文仅说明使用sort()方法进行自定义排序时的注意点 # 代码 # public class Test { static class Node{ String data; String seq; public Node(String data, String seq) { this.data = data; this.seq = seq; } @Override public String toString() { return "Node{" + "data='" + data + '\'' + ", seq='" + seq + '\'' + '}'; } } public static void main(String[] args) { List<Node> nodeList = new ArrayList<>(); nodeList.add(new Node("d","1")); nodeList.add(new Node("e","2")); nodeList.add(new Node("e","3")); nodeList.add(new Node("d","4")); //以下写法仅为示例 //故意返回 1 0 -1 //以下为求自定义的升序,这里认为data=“e”应该排在data="d"前面 nodeList.sort(new Comparator<Node>() { //这里有一个注意点 //入参o1在nodeList中的位置不一定在o2前面 //这里仅仅代表两个入参 @Override public int compare(Node o1, Node o2) { if (o1.data.compareTo(o2.data)>0){ //返回大于0的整型代表o1大于o2,o2应该排在o1前面 return 1; }else if(o1.data.compareTo(o2.data)==0){ //返回0代表o1等于o2,o1和o2不需要改变位置 return 0; }else{ //返回小于0的整型代表o1小于o2,o1应该排在o2 return -1; } } }); for (Node node:nodeList){ System.out.println(node); } } } ## 输出 ## > Node\{data=‘d’, seq=‘1’\} > Node\{data=‘d’, seq=‘4’\} > Node\{data=‘e’, seq=‘2’\} > Node\{data=‘e’, seq=‘3’\} # 总结 # 1. 入参o1在列表中的位置不一定在o2前面 2. compare方法返回大于0的整型代表o1大于o2,o2应该排在o1前面 3. compare方法返回0代表o1等于o2,o1和o2不需要改变位置 4. compare方法返回小于0的整型代表o1小于o2,o1应该排在o2
还没有评论,来说两句吧...