上面的大哥介绍了comoparable 我来说一下Comparator TreeSet的两种排序方式 (1). 让元素本身具有比较性 元素本身要实现Comparable接口并实现里面的compareTo方法以保证元素本身具有比较性 (2). 让容器自身具有比较性 当元素本身不具有比较性或者具备的比较性不是所需要的,就在TreeSet建立实例的时候,传入Comparator接口的实现子类的实例。这个Comparator子类必须实现compare方法。 【比较优先级】当元素和容器本身都具有比较性的时候,容器比较器优先 下面代码 对学生进行排序 先按照姓名排序 姓名一样在按照年龄排序
- class MyComparator implements Comparator{
- public int compare(Object o1, Object o2){
- if(!((o1 instanceof Student)&&(o2 instanceof Student))){
- throw new RuntimeException("类型不匹配");
- }
- Students1 =(Student)o1;
- Students2 =(Student)o2;
-
- int num =s1.getName().compareTo(s2.getName());
- if(num ==0)
- return s1.getAge() -s2.getAge();
- return num;
- }
- }
-
- class TreeSetDemoII{
- public static void sop(Object o){
- System.out.println(o);
- }
-
- public static void main(String[] args){
- TreeSetts =new TreeSet(new MyComparator());
- ts.add(new Student("lisi02", 22));
- ts.add(new Student("lisi007", 20));
- ts.add(new Student("lisi09", 19));
- ts.add(new Student("lisi09", 18));
-
- Iteratorit =ts.iterator();
- while(it.hasNext()){
- sop(it.next());
- }
- }
- }
复制代码 输出结果为:
|