TreeSet:
数据元素可以排序并且不可重复。
在使用 TreeSet时,
要么添加的元素已经实现了 Comparable接口,否则在
执行reeSet.add(bean)时,会报 cannot be cast to java.lang.Comparable 异常
要么在给TreeSet(Comparator类)
扫描二维码关注公众号,回复:
240925 查看本文章
TreeMap 是key需要进行实现 Comparable接口
或者 new TreeMap(传递Comparator类)
TreeSet类使用:
public class Person { private final String name;//名称 private final int handsome;//帅气指数 public Person() { name =null; handsome =0; } public Person(String name, int handsome) { super(); this.name = name; this.handsome = handsome; } public String getName() { return name; } public int getHandsome() { return handsome; } @Override public String toString() { return "姓名:"+this.name+",帅气指数:"+this.handsome+"\n"; } } 使用 new HashSet(Comparator方式) public static void main(String[] args) { Person p1 =new Person("您",100); Person p2 =new Person("刘德华",1000); Person p3 =new Person("梁朝伟",1200); Person p4 =new Person("老裴",50); //依次存放到TreeSet容器中,使用排序的业务类(匿名内部类) TreeSet<Person> persons =new TreeSet<Person>( new java.util.Comparator<Person>(){ @Override public int compare(Person o1, Person o2) { return -(o1.getHandsome()-o2.getHandsome()); } } ); persons.add(p1); //TreeSet 在添加数据时和以前的所有数据进行排序 persons.add(p2); persons.add(p3); persons.add(p4); System.out.println(persons); /* //改变数据 p4.setHandsome(100); p4.setName("您"); */ //p4 与p1 内容重复 System.out.println(persons); }
实体类实现Comparable接口后添加到 TreeSet中自动进行排序:
public class Worker implements java.lang.Comparable<Worker> { //工种 private String type; //工资 private double salary; public Worker() { // TODO Auto-generated constructor stub } public Worker(String type, double salary) { super(); this.type = type; this.salary = salary; } public String getType() { return type; } public void setType(String type) { this.type = type; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } /** * 按工资升序 */ @Override public int compareTo(Worker o) { return this.salary>o.salary?1:( this.salary==o.salary?0:-1); } @Override public String toString() { return "工种:"+this.type+",工资:"+this.salary+"\n"; } } public class TreeSetDemo2 { /** * @param args */ public static void main(String[] args) { Worker w1 =new Worker("垃圾回收员",12000); Worker w2 =new Worker("农民工",8000); Worker w3 =new Worker("程序猿",5000); TreeSet<Worker> employees =new TreeSet<Worker>(); employees.add(w1); employees.add(w2); employees.add(w3); System.out.println(employees); } }
TreeMap 使用:
new TreeMap(Comparator)方式: public static void main(String[] args) { Person p1 =new Person("您",100); Person p2 =new Person("刘德华",1000); Person p3 =new Person("梁朝伟",1200); Person p4 =new Person("老裴",50); TreeMap<Person,String> map =new TreeMap<Person,String>(new java.util.Comparator<Person>(){ @Override public int compare(Person o1, Person o2) { return -(o1.getHandsome()-o2.getHandsome()); } } ); map.put(p1, "bjsxt"); map.put(p2, "bjsxt"); map.put(p3, "bjsxt"); map.put(p4, "bjsxt"); //查看键 Set<Person> persons =map.keySet(); System.out.println(persons); }
TreeMap 使用 KEY是 Comparable接口类方式实现添加实体自动排序: public static void main(String[] args) { Worker w1 =new Worker("垃圾回收员",12000); Worker w2 =new Worker("农民工",8000); Worker w3 =new Worker("程序猿",5000); TreeMap<Worker,String > employees =new TreeMap<Worker,String >(); employees.put(w1,"hellworld"); employees.put(w2,"hellworld"); employees.put(w3,"hellworld"); System.out.println(employees.keySet()); }