Java基础巩固系列 LinkedHashSet

代码示例:

/**
 * Collection接口
 *    |-------List接口
 *         |--------ArrayList(主要的实现类)
 *         |--------LinkedList(对于频繁的插入、删除操作)
 *         |--------Vector(古老的实现类、线程安全的,但效率低于ArrayList)
 *    |-------Set接口:存储无序、不可重复的元素.Set中常用的方法都是Collection下定义的。
 *         |--------HashSet(主要的实现类)
 *         |--------LinkedHashSet
 *         |--------TreeSet
 *
 *   Set:存储的元素是无序的,不可重复的!
 *   1.无序性:无序性 != 随机性。真正的无序性,指的是元素在底层存储的位置是无序的。
 *   2.不可重复性:当向Set中添加进相同的元素的时候,后面的这个不能添加进去.
 *
 *   说明:要求添加进Set中的元素所在的类,一定要重写equals()和hashCode()方法。进而保证Set元素的不可重复性!
 *
 *   Set中的元素是如何存储的呢?使用哈希算法。
 *   当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,计算此对象的哈希值,此哈希值
 *   决定了此对象在Set中的存储位置。若此位置之前没有对象存储,则这个对象直接存储到此位置。若此位置
 *   已经有对象存储,再通过equals()方法比较这两个对象是否相同。如果相同,后一个对象就不能再添加进来。
 *   万一返回false呢,都存储。(不建议如此)
 *       > 要求:hashCode()方法要与equals()方法一致。
 *
 * */
public class TestSet {

    /**
     * LinkedHashSet:使用链表维护了一个添加进集合中的顺序,导致当我们遍
     * 历LinkedHashSet集合元素时,是按照添加进去的顺序遍历的!
     *
     * LinkedHashSet插入性能略低于HashSet,但在迭代访问Set里的全部元素时有很好的性能
     * */

    @Test
    public void test2(){
        Set set = new LinkedHashSet();
        set.add(123);
        set.add(456);
        set.add("AA");
        set.add("AA");
        set.add("BB");
        set.add(null);

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

}

结果:

123
456
AA
BB
null

内存图:

 

猜你喜欢

转载自blog.csdn.net/Peter__Li/article/details/88977786
今日推荐