关于Node和Entry的总结与分析
涉及到的接口和类:
- Map.Entry接口
- 注意:这里的Map是一个接口,而我们的Map.Entry也是一个接口,这个时候就说明了我们的Map.Entry接口是Map接口中的一个内部接口
- 不仅可以有内部类,也可以有内部接口
- 注意:这里的Map是一个接口,而我们的Map.Entry也是一个接口,这个时候就说明了我们的Map.Entry接口是Map接口中的一个内部接口
- HashMap.Node类
- LinkedHashMap.Entry类
- TreeMap.Entry类
- Hashtable.Entry类
这几个API的使用位置和作用:
- HashMap.Node作为HashMap的底层存储单元
- 我们创建HashSet底层其实就是创建了一个HashMap对象,所以我们就可以说是HashSet底层的存储单元也是HashMap.Node
- LinkedHashMap.Entry作为LinkedHashMap的底层存储单元
- 我们创建LinkedHashSet底层其实就是创建了一个LinkedHashMap类的对象,所以我们就说是LinkedHashMap底层的存储单元也是LinkedHashMap.Entry
- TreeMap.Entry类作为TreeMap的底层存储单元
- 我们创建TreeSet类的时候底层其实就是创建了一个TreeMap类的对象,所以我们就说是TreeSet的底层存储单元也是TreeMap.Entry
- Hashtable.Entry类作为Hashtable的底层存储单元
这几个API的之间的继承与实现关系:
- HashMap类实现了Map.Entry接口
- LinkedHashMap.Entry类继承了HashMap.Node类
- TreeMap.Entry类实现了Map.Entry接口
- Hashtable.Entry实现了Map.Entry接口
关于这几个API中都记录了什么(封装了什么属性?)
- HashMap.Node中 ---- 记录了结点的hash(哈希值) , key , value , next(Node<K,V> next),用于存储单向链表结构中的数据
- Hashtable.Entry中 ---- 记录了结点的hash ,key ,value ,next, 用于存储单向链表结构中的数据
- LinkedHashMap.Entry中 ---- 不仅记录了结点的hash , key , value , next,还维护了一个双向的数据结构(其实就是维护了两个LinkedHashMap.Entry类的两个引用before和after)
- TreeMap.Entry中 ---- 记录了结点的key, value,还维护了一个红黑树的数据结构(也就是还维护了 左右结点 , 父结点 , 信息 ,和自身颜色)
总结:
- 通过这几个类和接口的名字我们不难发现,这里的Node和Entry都是内部类或者内部接口
- 我们在创建Set时其实是在底层创建了对应结构的Map对象