java Collections.sort()
sort()是Collections中的静态方法,用于对List容器中的元素排序。
如容器list中存储的是Integer对象
List<Integer> list =Arrays.asList(3, 2, 7, 5, 9, 6);
System.out.println(Arrays.toString(list.toArray()));
输出结果为:[3, 2, 7, 5, 9, 6]
使用Collections.sort()对list排序
Collections.sort(list);
System.out.println(Arrays.toString(list.toArray()));
输出结果为:[2, 3, 5, 6, 7, 9]
使用Collections.sort()是有约束条件的,List中存储的对象必须实现了Comparable接口,如Integer,Double等。
如下定义一个Interval(区间)对象:
class Interval { int start; int end; Interval(int start, int end) { this.start = start; this.end = end; }
容器list中存储的为Interval对象,使用Collections.sort()方法则报错。
List<Interval> list = new ArrayList<>(); list.add(new Interval(2, 4)); list.add(new Interval(0, 4)); list.add(new Interval(3, 5)); list.add(new Interval(1, 2)); list.add(new Interval(7, 9)); list.add(new Interval(6, 8)); Collections.sort(list); // error
一种方法是使Interval类实现Comparable接口,按Interval对象中start大小排序。
class Interval implements Comparable<Interval>{ int start; int end; Interval(int start, int end) { this.start = start; this.end = end; } @Override public int compareTo(Interval temp) { return this.start - temp.start; } }
再使用Collections.sort()方法对list中的元素排序,便不会报错。
List<Interval> list = new ArrayList<>(); list.add(new Interval(2, 4)); list.add(new Interval(0, 4)); list.add(new Interval(3, 5)); list.add(new Interval(1, 2)); list.add(new Interval(7, 9)); list.add(new Interval(6, 8)); for (Interval obj:list) System.out.print(obj.start + " "); System.out.println(); Collections.sort(list); for (Interval obj:list) System.out.print(obj.start + " ");
输出结果为:
2 0 3 1 7 6
0 1 2 3 6 7
另一种方法是使用Collections.sort(List<T> list, Comparator<? super T> c),使用一个Comparator对象,完成list中元素的排序。
如:
class MyComparator implements Comparator<Interval> { public int compare(Interval o1, Interval o2) { return o1.start - o2.start; } }
Collections.sort(list, new MyComparator()); for (Interval obj:list) System.out.print(obj.start + " ");
输出结果为:0 1 2 3 6 7
也可以使用匿名内部类
Collections.sort(list, new Comparator<Interval>(){ @Override public int compare(Interval o1, Interval o2) { return o1.start - o2.start; } });
也可以使用Lambda表达式:
Collections.sort(list, (a,b)->(a.start-b.start));
总结:
Collections.sort()用于对List中存储的对象进行排序,该方法有两种使用方式。
Collections.sort(List<T> list) list中的元素必须实现了Comparable接口。
Collections.sort(List<T>list, Comparator<? super T>),使用Comparator对象比较list中的元素。
posted on 2018-05-12 11:16 Deltadeblog 阅读(163) 评论(0) 编辑 收藏 举报