Java_基础Set集合概述及特点

Collection

        List    有序,可重复.

        Set    无序,唯一.

        HashSet:

             底层为HashMap。

            步骤: 先看hashCode()值是否相同

                        相同:继续走equals()方法

                                    返回true:元素重复不添加;

                                    返回false:元素不重复添加;

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

             如果类没有重写这两个方法,默认使用object的方法,一般来说不相同.

       练习:

            需求:存储自定义对象,并保证元素的唯一性。

            要求:如果两个对象的成员变量值都相同,则视为同一个对象。

           通过重写hashCode()与equals();

            只有当hashCode()相同时才会进行equals()比较对象;

      哈希表是一个元素为链表的数组,综合了数组和链表的好处。

      哈希值与成员变量相关。

      一般有提供自动生成hashCode和equals.

LinkedHashSet:底层数据结构由哈希表和链表组成。

哈希表保证元素的唯一性,链表保证元素的有序。

TreeSet

                 特点:唯一,有序。

                 能够对元素按照某种规则进行排序。

                 排序有两种:

                  1.自然排序(无参构造器默认/元素)

                      真正的比较依赖于元素的comparaTo(),而这个方法定义在Comparator

                      元素存入TreeSet时需要implements Comparable,重新comparaTo();

                      return 0;均相同,只存一个;return >0 正序; return <0;倒序;

                     当编写comparaTo()时,注意多重条件的编写;

                     String默认重写了comparaTo();

                     当获得主要条件时,要自己分析出次要条件。

                  2.比较器排序(comparator/集合排序)

          Comparable(自然排序)

          新建一个类,实现comparator接口,重写compare();

         在调用时例如:TreeSet ts = new TreeSer(new myComparator());

         一般开发中用匿名内部类实现。

选择自然排序还是比较器排序,根据的是Treeset的构造方法。

 

你可能感兴趣的:(夯实基础)