集合排序 Collections.srot Comparable Comparator

来源:互联网 发布:vb制作计算器 编辑:程序博客网 时间:2024/06/14 19:43

java.util.Collections提供了sort()方法,由于必须具有索引才能进行排序,因此sort()方法接受List操作对象。

1、简单的集合排序实例如下:

import java.util.ArrayList;import java.util.Collections;import java.util.List;public class test {public static void main(String[] args){List<String> list =new ArrayList<String>();list.add("bac");list.add("abc");list.add("aac");System.out.println(list);//没有排序前的集合输出顺序Collections.sort(list);System.out.println(list);//排序后输出顺序}}
输出结果如下:

[bac, abc, aac]
[aac, abc, bac]
2、根据字符串长短进行排序:

package test1;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class test {public static void main(String[] args){List<String> list =new ArrayList<String>();list.add("bacd");list.add("abcdf");list.add("aac");System.out.println(list);//没有排序前的集合输出顺序Collections.sort(list,new MyComparator());System.out.println(list);//排序后输出顺序}}class MyComparator implements Comparator{public int compare(Object o1,Object o2){String str1=(String)o1;String str2=(String)o2;/**if (str1.length()>str2.length()){return 1;}if (str1.length()==str2.length()){return 0;}else{return -1;}***/int num=new Integer(str1.length()).compareTo(new Integer(str2.length()));if(num==0){return str1.compareTo(str2);//当字符串长度相等时,按字母排序}return num;}}
输出结果:
[bacd, abcdf, aac][aac, bacd, abcdf]
3、对对象某元素排序 实现Comparable接口,重写compareTo()方法

package test1;import java.util.Iterator;import java.util.TreeSet;public class test {public static void main(String[] agrs){TreeSet<Student> ts = new TreeSet<Student>();ts.add(new Student("liming",23));ts.add(new Student("Liming",20));ts.add(new Student("ziming",23));ts.add(new Student("Siming",23));Iterator<Student> it= ts.iterator();while(it.hasNext()){Student stu=(Student)it.next();System.out.println(stu.getName()+stu.getAge());}}}class Student implements Comparable<Object>{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int compareTo(Object obj){//按照年龄进行排序//次要条件姓名排序if(!(obj instanceof Student))throw new RuntimeException("不是学生对象");Student s=(Student)obj;if(this.age>s.age){return 1;}else if(this.age==s.age){//return 0;return this.name.compareTo(s.name);//String中的compareTo实际上实现的Comparable接口中方法}else{return -1;}}Student(String name,int age){this.name=name;this.age=age;}}
运行结果:

Liming20
Siming23(S是大写)

liming23
ziming23

Comparable与Comparator的区别

1、 Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。
2、Comparator位于包Java.util下,而Comparable位于包   java.lang下
3、Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 String、Integer 自己就可以完成比较大小操作,已经实现了Comparable接口)   
4、 自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序


1 0