JDK源码学习之集合HashMap、Hashtable、WeakHashMap比较
来源:互联网 发布:在笔记本电脑下载软件 编辑:程序博客网 时间:2024/05/21 04:00
先上一张Java 集合框图:
HashMap:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
Hashtable:
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable
WeakHashMap:
public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>
WeakHashMap是一种改进的HashMap,它对key实验“弱引用”,若是一个key不再被外部所引用,那么该key可以被GC收受接管。
不同:
1. 继承不同:
Hashtable继承自Dictionary
2. 是否允许为null,是否允许重复
HashMap不允许key重复,允许value重复,只允许一个key为null,value可以为任意值,这里有个需要注意的是,但我们用get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。。Hashtable的key和value均不允许为null。
3. 线程安全
HashMap是非synchronized(非线程安全的实现),如果涉及到多个线程,那就不应该考虑使用HashMap。HashMap可以通过下面的语句进行同步: Map map = Collections.synchronizeMap(hashMap) HashTable是synchronized(线程安全实现),这意味着HashTable是线程安全的,多个线程可以共享一个HashTable。但是Java 5提供了ConcurrentHashMap,它比HashTable的扩展性更好、性能更高。ConcurrentHashMap到底和Hashtable有啥不一样,笔者也查阅下相关知识,主要Hashtable的实现方式是锁整个hash表,而ConcurrentHashMap分段式封锁,分层多个节点进行关键部位加锁,避免大锁,允许多个修改操作并发进行。
4.遍历方式的内部实现上不同
Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
5.哈希值的使用不同
HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
6.内部实现方式的数组的初始大小和扩容的方式不一样
HashTable中的hash数组初始大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
- JDK源码学习之集合HashMap、Hashtable、WeakHashMap比较
- 深入Java集合源码学习系列:比较HashMap、Hashtable、TreeMap、ConcurrentHashMap、WeakHashMap性能
- 面试Java基础之HashMap、Hashtable、WeakHashMap比较
- 集合源码学习(十):HashTable(Java8)与HashMap比较
- JDK源码学习之集合框架HashMap
- Java中Hashtable,HashMap,WeakHashMap比较
- jdk集合源码之HashMap
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- Java 集合系列之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- jdk源码分析之WeakHashMap
- java集合 hashmap hashtable weakhashmap linkedlist arraylist vector
- JDK源码学习之HashMap
- java学习(3)concurrenthashmap hashtable hashmap copyonwritearraylist weakHashMap待续
- Map接口之Hashtable、HashMap、LinkedHashMap、TreeMap、WeakHashMap等
- HashMap、HashTable、TreeMap和WeakHashMap
- Gym
- 目前hadoop大数据的视频教程谁讲的比较好?我个人对比,欢迎评论补充
- maven添加jar包
- Mac MySQL 使用(第一天)
- python内置函数
- JDK源码学习之集合HashMap、Hashtable、WeakHashMap比较
- YUV与RGB格式转换(一)
- 红黑树
- 邻接矩阵的图结构
- LINQ左外连接
- 从零开始学习OpenCL开发(六)深入API
- 实型数据的输入输出。如何保留x位小数?如何四舍五入?数据类型转换?
- 第七周 5 -排队看病模拟
- python安装pygame无法找到SDL.h文件