/* Set:无序,不可重复 HashSet:数据结构式哈希表,线程非同步。保证元素唯一性的原理,判断hashCode是否相同,如果相同,判断元素的equals方法。 TreeSet:可以对集合中的元素进行排序,底层数据结构是二叉树,保证元素唯一性的依据:compareTo方法的return 0. TreeSet的排序方法: 1、方法一:让元素自身具有比较性。元素需要实现Comparable接口,重写compareTo方法,这种方式也是元素的自然顺序,叫做默认排序 2、方法二:当元素不具备比较性,或者具备的比较性不是需要的,这时,要让集合自身具有比较性。在集合初始化时就具有比较性。在TreeSet初始化时, 定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。 当两种排序都存在时,以比较器为主 步骤: 定义一个类,实现Comparator接口,重写compare方法,以return 0判断是否相同。 ClassCastException - 如果参数的类型不允许此 Comparator 对它们进行比较。 */ import java.util.*; class TreeSetDemo { public static void main(String[] args) { System.out.println("实现Comparable"); TreeSet ts = new TreeSet(); ts.add(new Student("java1",106)); ts.add(new Student("java2",102)); ts.add(new Student("java3",103)); ts.add(new Student("java4",104)); Iterator it = ts.iterator(); while(it.hasNext()) { Student stu = (Student)it.next(); System.out.println(stu.getName() + "..." + stu.getAge()); } System.out.println("实现Comparator"); TreeSet ts1 = new TreeSet(new Person()); ts1.add(new Person("java1",106)); ts1.add(new Person("java2",102)); ts1.add(new Person("java3",103)); ts1.add(new Person("java4",104)); Iterator it1 = ts1.iterator(); while(it1.hasNext()) { Person per = (Person)it1.next(); System.out.println(per.getName() + "..." + per.getAge()); } } } class Student implements Comparable { private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public int getAge() { return this.age; } public int compareTo(Object obj1) //当主要条件相同时,进行次要条件判断,如果只有一个条件,那么相同就是两个对象相同,添加不成功 //导致添加不成功 { if(!(obj1 instanceof Student)) return -1; Student stu1 = (Student)obj1; if(stu1.age < this.age) { return -1; } if(this.age == stu1.age) return 0; return 1; } } class Person implements Comparator //根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。 { private String name; private int age; Person() { } Person(String name,int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public int getAge() { return this.age; } public int compare(Object obj1,Object obj2) { Person p1 =(Person)obj1; Person p2 =(Person)obj2; if(p2.age > p1.age) { return 1; } if(p2.age == p1.age) { return 0; } return -1; } }