Java TreeSet的使用

78 阅读1分钟

1. TreeSet的使用

1.1 底层的数据结构:红黑树

1.2添加数据后的特点

可以按照添加的元素的指定的属性的大小顺序进行遍历

1.3 向TreeSet中添加的元素的要求:

  • 要求添加到TreeSet中的元素必须是同一个类型的对象,否则会报classCastException
  • 添加的元素需要考虑排序: 自然排序、定制排序

1.4 判断数据是否相同的标准

  • 不再是考虑hashCode()和equals()方法了,也就意味着添加到TreeSet中的元素所在的类不需要重写hashCode()和equals()方法
  • 比较元素大小或比较元素是否相等的标准就是考虑自然排序或定制排序中,compareTo()或compare()的返回值。如果compareTo()或compare()的返回值为0,则认为两个对象是相等的。由于TreeSet中不能存放相同的元素,则后一个相等的元素就不能添加到TreeSet中。
public static void main(String[] args) {

    Comparator comparator = new Comparator() {

        //按名字大小进行排序,如果姓名相同,则比较age,从大到小排序
        @Override
        public int compare(Object o1, Object o2) {
            if(o1 instanceof compare && o2 instanceof compare){
                compare cp1 = (compare) o1;
                compare cp2 = (compare) o2;

                int value = cp1.getName().compareTo(cp2.getName());
                if (value != 0){
                    return -value;
                }
                return -(cp1.getAge() - cp2.getAge());
            }
            throw new RuntimeException("类型不匹配");
        }
    };


    TreeSet set = new TreeSet(comparator);

    compare c1 = new compare("tom",18);
    compare c2 = new compare("tom",21);
    compare c3 = new compare("lucci",18);
    compare c4 = new compare("jerry",19);

    set.add(c1);
    set.add(c2);
    set.add(c3);
    set.add(c4);

    Iterator iterator = set.iterator();
    while(iterator.hasNext()){
        System.out.println(iterator.next());
    }
}