JAVA:集合Collection(五)-Set学习

public class LearnSet {
    /*Set接口:存储无序的,不可重复的数据 --->高中集合
    没有额外定义新的方法,使用都是Collection中声明过的方法
    要求:想Set中添加的数据,其所在类一定要重写hashCode()和equals()
         重写的hashCode()和equals()要保持一致性(相等的对象拥有相等的散列码)
    HashSet,LinkedHashSet和TreeSet的异同
    不同:HashSet:是Set的主要实现类,线程不安全,可以存储null值,底层为数组+链表的结构(JDK7),JDK8为HashMap
            LinkedHashSet:是HashSet的子类,遍历内部数据时,可以按照添加的顺序遍历
            对于频繁的遍历操作,linkedHashSet比HashSet效率高
         TreeSet:可以按照添加对象的指定属性进行排序,向TreeSet中添加的数据,要求是相同类的对象
     */
    public static void main(String[] args) {
        //以Hashset为例
        //1.无序性:不等于随机性。存储的数据在底层数组中不是按照索引添加,而是根据数据的Hash值决定位置
        //2.不可重复性:保证添加的元素按照equals()判断时,不能返回TRUE
        /*添加元素的过程:
          我们向HashSet中添加元素a,首先调用元素a所在的hashCode()方法计算元素a的Hash值,
          此Hash值通过某种算法计算出HashSet底层数组中存放的位置(索引位置),
          判断数组在此位置上是否已经有元素了
          如果没有元素,则元素a添加成功
          如果有其他元素b(或以链表的形式存在的多个元素),则比较元素a和b的Hash值
            如果Hash值不相同,则添加成功
            如果Hash值相同,则调用元素a所在类的equals()方法
                返回true,元素a添加失败
                返回false,元素a添加成功
          添加成功情况:
          jdk7:元素a放到数组中,指向原来元素
          jdk8:原来元素在数组中,指向元素a
          总结:七上八下
         */
        Set set = new HashSet();
        set.add(123);
        set.add(123);
        set.add(123);
        set.add("abc");
        set.add(456);
        set.add("efg");
        Iterator iterator1 = set.iterator();
        while (iterator1.hasNext()){
            System.out.println(iterator1.next());
        }
        System.out.println("================>");
        /*
            linkedHashSet作为HashSet子类,在添加数据的同时还维护了一对链表(指针域)
            优点:对于频繁的遍历操作,linkedHashSet比HashSet效率高
         */
        Set linkedHashSet = new LinkedHashSet();
        linkedHashSet.add(123);
        linkedHashSet.add(123);
        linkedHashSet.add(123);
        linkedHashSet.add("abc");
        linkedHashSet.add(456);
        linkedHashSet.add("efg");
        Iterator iterator2 = linkedHashSet.iterator();
        while (iterator2.hasNext()){
            System.out.println(iterator2.next());
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容