Java集合的实现细节—Set集合和Map集合
从表面上看,Set和Map相似性很少,但实际上可以说Map集合时Set集合的扩展。
Set集合的继承体系
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对。如下图所示:
Map集合示意图 将关联数组的key-value对捆绑在一起
3、实现把Set扩展成“Map”集合为了把Set扩展成“Map”,可以考虑重新定义一个SimpleEntry类,使用这个类来代表一个key-value对。当Set集合的元素都是SimpleEntry对象时,该Set集合就变成了“Map”集合。
SimpleEntry.java
由此可以看出,只要对Set稍做改造,就可将Set改造成可以和系统媲美的Map集合。