TreeSet知识点总结

Set集合一大特点是唯一性。

Set集合是如何保证元素的唯一性的?

答:Set集合保证元素唯一性依赖两个方法:hashCode()equals()

步骤

   先看hashCode()值是否相同

   相同:继续走equals()方法

   返回true 说明元素重复,就不添加

   返回false:说明元素不重复,就添加到集合

   不同:就直接把元素添加到集合

TreeSet集合两大特点:唯一和排序

如何保证元素唯一的?如何实现元素排序的?

答:TreeSet是基于TreeMap实现的,TreeMap集合的底层数据结构是红黑树(一种自平衡的二叉查找树),这就保证了元素的存入和获取都是按照一定顺序进行的。

元素是如何存储进去的呢?

第一个元素存储的时候,直接作为根节点存储

从第二个元素开始,每个元素从根节点开始比较

    大     就作为右孩子

    小     就作为左孩子

    相等   就不搭理它

这就有一个问题,在存储元素的时候,如何判断是大?是小?是相等?

答:TreeSe有两种排序方式:自然排序和比较器排序。至于使用哪种排序方式,由构造方法决定。

自然排序:

  要求创建TreeSet时,使用空参构造,要排序的对象所属的类必须实现Comparable接口,重写compareTo()方法,compareTo()方法,返回一个int类型的值,返回1代表大,往右放;返回-1,代表小,往左放;返回0,代表相等,不搭理。

    基本数据类型包装类、字符串等类都实现了Comparable接口,重写了compareTo()方法。

    String类中compareTo()方法的源码解析:

        1、首先获取到两个字符串中长度较小的那个,定义为minLength。

2、将两个字符串转成字符数组
3、根据minLength,遍历两个字符数组中的各个字符,一对一进行比较。如果相等,比较下一对字符;如果不相等,返回两个字符相减后的结果
4、如果在minLength范围内,字符均相等,那么返回两个字符串长度相减后的结果

                        正数:大

                        负数:小

                        0   :相等

比较器排序:

  要求创建TreeSet时,使用有参构造,参数为比较器Comparator(接口)的实现类,要重写compare()方法,compare()方法,返回一个int类型的值,返回1代表大,往右放;返回-1,代表小,往左放;返回0,代表相等,不搭理。

元素是如何取出来的呢?

      中序遍历取元素。

猜你喜欢

转载自blog.csdn.net/lz1170063911/article/details/80137283