读书人

猖獗JavaJava集合的实现细节S

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

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

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

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


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

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

Set集合的继承体系

猖獗Java——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——Java集合的实现细节——Set和Map 猖獗Java——Java集合的实现细节——Set和Map

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

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

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


SimpleEntry.java



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



读书人网 >编程

热点推荐