读书人

Java集合的实现细节Set会合和Map集合

发布时间: 2013-10-08 17:08:58 作者: rapoo

Java集合的实现细节—Set集合和Map集合

Set:代表无序、不可重复的集合Map:代表key-value对集合,也称为关联数组

从表面上看,Set和Map相似性很少,但实际上可以说Map集合时Set集合的扩展。


1、Set集合和Map集合的继承体系

Java集合的实现细节—Set会合和Map集合

Set集合的继承体系

Java集合的实现细节—Set会合和Map集合

Map集合的继承体系

2、Set集合和Map集合的关系

仔细观察上面两张图,可以发现以下规律:

Set <---> MapEnumSet <---> EnumMapSortedSet <---> SortedMapTteeSet <---> TreeMapNavigableSet <---> NavigableMapHashSet <---> HashMapLinkedHashSet <---> LinkedHashMap

以上的关系绝对不是偶然的,Map集合的key不能重复,而且也是无序的。亦即Map集合中的key可以组成一个Set集合。实际上,Map集合提供了如下方法返回key所组成的Set集合。

Set<K> keySet()

由此,即可实现从Map到Set的转换。其实,还可以实现从Set到Map的扩展——Map集合就相当于一个Set集合,只是此时Set集合中的元素都是key-value对。如下图所示:

Java集合的实现细节—Set会合和Map集合 Java集合的实现细节—Set会合和Map集合

Map集合示意图 将关联数组的key-value对捆绑在一起

3、实现把Set扩展成“Map”集合

为了把Set扩展成“Map”,可以考虑重新定义一个SimpleEntry类,使用这个类来代表一个key-value对。当Set集合的元素都是SimpleEntry对象时,该Set集合就变成了“Map”集合。


SimpleEntry.java



由此可以看出,只要对Set稍做改造,就可将Set改造成可以和系统媲美的Map集合。



读书人网 >编程

热点推荐