【Java入门提高篇】Day29 Java容器类详解(十一)LinkedHashSet详解

 当当当当当当当,本来打算出去浪来着,想想还是把这个先一起写完吧,毕竟这篇的主角跟我一样是一个超级偷懒的角色——LinkedHashSet,有多偷懒?看完你就知道了。

  本篇将从以下几个方面对LinkedHashSet进行介绍:

  1、LinkedHashSet中的特性

  2、LinkedHashSet源码分析

  3、LinkedHashSet应用场景

  本篇预计需要食用10分钟,快的话五分钟也够了,完全取决于各位看官心情。

LinkedHashSet中的特性

  前面已经介绍过了HashSet,本篇要介绍的LinkedHashSet正是它的儿子,作为HashSet的唯一法定继承人,可以说是继承了HashSet的全部优点——懒,并且将其发挥到了极致,这一点在之后的源码分析里可以看到。

  LinkedHashSet继承了HashSet的全部特性,元素不重复,快速查找,快速插入,并且新增了一个重要特性,那就是有序,可以保持元素的插入顺序,所以可以应用在对元素顺序有要求的场景中。

  先来看一个小栗子:

复制代码
public class LinkedHashSetTest {     public static void main(String[] args){         LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();         HashSet<String> hashSet = new HashSet<>();          for (int i = 0; i < 10; i++) {             linkedHashSet.add("I" + i);             hashSet.add("I" + i);         }          System.out.println("linkedHashSet遍历:");         for (String string : linkedHashSet){             System.out.print(string + " ");         }         System.out.println();          System.out.println("hashSet遍历:");         for (String string : hashSet){             System.out.print(string + " ");         }     } }
复制代码
复制代码
linkedHashSet遍历: I0 I1 I2 I3 I4 I5 I6 I7 I8 I9  hashSet遍历: I9 I0 I1 I2 I3 I4 I5 I6 I7 I8 
复制代码

  可以看到,在HashSet中存储的元素遍历是无序的,而在LinkedHashSet中存储的元素遍历是有序的。嗯,它和HashSet就这唯一的区别了。

LinkedHashSet源码分析

  那么问题来了,LinkedHashSet中的元素为什么会是有序的呢?难道也跟LinkedHashMap一样用了链表把元素都拴起来了?别着急,让我们一起来看看源码。

复制代码
public class LinkedHashSet<E>        extends HashSet<E>        implements Set<E>, Cloneable, java.io.Serializable {      private static final long serialVersionUID = -2851667679971038690L;      /**      * 使用指定初始容量和装载因子构造一个空的LinkedHashSet实例      */    public LinkedHashSet(int initialCapacity, float loadFactor) {         super(initialCapacity, loadFactor, true);     }      /**      * 使用指定的初始容量和默认的装载因子构造一个空的LinkedHashSet实例      */    public LinkedHashSet(
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信