Set、Map底层实现分析
Set、Map是Java中经常用到的两个结构,在了解Set&Map结构的底层实现之前我先来简单的介绍一下Set和Map。
Set:Set是一个接口,在Set集合内无法存储重复的元素,Set常用实现类有HashSet、LinkedHashSet、TreeSet。
Map:Map同样也是一个接口,具有键值对(K--V)的特点,与Set非常相似的常用实现类有HashMap、LinkedHashMap、TreeMap。
下图为Set&Map类关系图:
从图中不难看出Set&Map类结构图非常相似,可以猜想到,他们必有渊源。
Set&Map知识储备
首先我们要储备一些关于Set&Map的知识,再通过源码来判断Set&Map的关系。
Set:从Set几个常用实现类可以看出,HashSet是哈希表实现的(不稳定),LinkedHashSet是链表实现的(按存储顺序存取),TreeSet是红黑树实现的(按排序顺序存取);通常我们称Set为单列集合。
Map:同样从Map常用实现类可以看出,HashMap是哈希表实现的(不稳定),LinkedHashMap是链表实现的(按存储顺序存取),TreeMap是红黑树实现的(按排列顺序存取);通常我们称Map为双列集合;Map中还有一个特别的实现类Hashtable,这是JDK1.0遗留下来的,现已经被HashMap替代,Hashtable较HashMap的区别与Vector较ArrayList的区别相似: * Hashtable是线程安全的,效率低; * HashMap是线程不安全的,效率高;
Set&Map底层实现判别
问:在Set&Map底层是用Map结构实现的Set,还是用Set结构实现的Map?
答:Map实现的Set。
理由:上套餐(源码)
画图理解:
谢谢阅读 ----知飞翀