Comparator接口代码实例
------- android培训、java培训、期待与您交流! ----------
set:元素是无序(存入和取出的顺序不一定一致),不可以重复
set集合的功能和Collection一样
------||HashSet:
是如何保证元素的唯一性的呢?
是通过元素的两个方法,hashCode和equlas来完成。
如果元素的hashCode值相同,才会判断equlas是否为true。
如果元素的hashcode值不同,不会判断equlas方法。
------|| TreeSet:可以对Set集合中的元素进行排序。排序的两种要素:集合和元素。
TreeSet存储自定义对象,在排序时,当主要条件相同时,一定要判断次要条件。
底层数据结构是二叉树。保证元素唯一性的依据:compareTo方法return 0;
TreeSet排序的第一种方法:让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。
这正方式成为元素自然排序,或者叫默认排序。
TreeSet的第二种排序方式。
当元素自身不具备比较性,或者具备的比较性,不是所以所需要的。
这是就需让集合自身具备比较性。在集合初始化时,就有了比较方式。
定义一个类,实现compareable接口,覆盖compare方法。
两种方式都存在时,以比较器为主。
代码如下:
package com.day14.wd; import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; public class TreeSetDemo { public static void main(String[] ag){ TreeSet ts=new TreeSet(new MyCompare()); ts.add(new Student("lisi", 123)); ts.add(new Student("wangwu", 23)); ts.add(new Student("wef",23)); Iterator it=ts.iterator(); while (it.hasNext()) { Student ss = (Student) it.next(); System.out.println("name"+ss.getName()+",age"+ss.getAge()); } } } class MyCompare implements Comparator{ public int compare(Object o1, Object o2) { // TODO Auto-generated method stub Student p1=(Student)o1; Student p2=(Student)o2; //保证唯一性,返回0; int num=p1.getAge()-p2.getAge(); if(num==0){ return p2.getName().compareTo(p2.getName()); }//String实现了compareTo()方法 return num ; } } class Student { private String name; private int age; public Student(String name,int age){ this.name=name; this.age=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; } }