飞利浦·斯塔克|java容器类介绍( 二 )


table) , 元素会通过哈希转换函数将元素的哈希地址转换成数组中存放的索引 , 如果有冲突 , 则使用散列链表的形式将所有相同哈希地址的元素串起来 , 可能通过查看HashMap.Entry的源码它是一个单链表结构 。 (初始容量值:16 , 加载因子0.75f , 扩容两倍)
HashTable:也是以哈希表数据结构实现的 , 解决冲突时与HashMap也一样也是采用了散列链表的形式 。 HashTable继承Dictionary类 , 实现Map接口 。 其中Dictionary类是任何可将键映射到相应值的类(如 Hashtable)的抽象父类 。 每个键和每个值都是一个对象 。 在任何一个 Dictionary 对象中 , 每个键至多与一个值相关联 。 Map是”key-value键值对”接口 。HashTable采用”拉链法”实现哈希表不过性能比HashMap要低 。 (初始容量16 , 加载因子0.75f , 扩容两倍 。 )
TreeMap:有序散列表 , 实现SortedMap接口 , 底层通过红黑树实现 。
WeakHashMap:以弱键实现的基于哈希表的Map 。 在 WeakHashMap 中 , 当某个键不再正常使用时 , 将自动移除其条目 。 更精确地说 , 对于一个给定的键 , 其映射的存在并不阻止垃圾回收器对该键的丢弃 , 这就使该键成为可终止的 , 被终止 , 然后被回收 。 丢弃某个键时 , 其条目从映射中有效地移除 , 因此 , 该类的行为与其他的 Map 实现有所不同 。 null值和null键都被支持 。 该类具有与HashMap类相似的性能特征并具有相同的效能参数初始容量和加载因子 。
容器类补充
1)需要快速插入 , 删除元素 , 应该使用LinkedList , 如果需要快速随机访问元素 , 应该使用ArrayList 。
2)可以使用Collections 工具类中unmodifiableList/unmodifiableMap/unmodifiableSet/unmodifiableSortedMap/unmodifiableSortedSet等创建不能修改的ListMapList等
3)可以使用Collections工具类中Collections.synchronizedList(new ArrayList())等实现同步


推荐阅读