Java中Hashtable和HashMap区别「建议收藏」
大家好,又见面了,我是你们的朋友全栈君。
第一,继承和实现不同
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
第二,线程安全不同
Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。Hashtable的所有 public 方法声明中都有 synchronized 关键字。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。
第三,对NULL处理不同
Hashtable中,key和value都不允许出现null值。
在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
第四,两个遍历方式的内部实现上不同
Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
第五,哈希值使用不同
哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
HashTable:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
HashMap:
int hash = hash(k);
int i = indexFor(hash, table.length);
static int hash(Object x) {
int h = x.hashCode();
h += ~(h << 9);
h ^= (h >>> 14);
h += (h << 4);
h ^= (h >>> 10);
return h;
}
static int indexFor(int h, int length) {
return h & (length-1);
第六,默认大小和增长方式不同
Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192110.html原文链接:https://javaforall.cn
相关文章
- java handlersocket_HandlerSocket java客户端「建议收藏」
- 老程序员Java数组转List都这样操作「建议收藏」
- java h2数据库_JAVA 项目中使用 H2 数据库
- 在java中print和println_JAVA命令行参数
- Java实现AD域登录认证「建议收藏」
- java对象数组 创建对象数组,初始化对象数组「建议收藏」
- 解决Serialized class ** must implement java.io.Serializable问题「建议收藏」
- Java Map集合的详解「建议收藏」
- Java中如何声明数组「建议收藏」
- java分布式框架_5个强大的Java分布式缓存框架推荐
- Java解析XML文件的四种方法「建议收藏」
- Java中byte类型的范围「建议收藏」
- java启动器_JAVA基础:Java 启动器如何查找类
- Java实现一个简单的冒泡排序「建议收藏」
- java输入语句怎么写_java中输入语句是怎么写的「建议收藏」
- java.util.scanner sc_Java的Scanner sc=new Scanner(System.in)是什么意思「建议收藏」
- java计时器StopWatch「建议收藏」
- ‘java‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件「建议收藏」
- VSCODE 打造完美java开发环境「建议收藏」
- java ftl_.ftl文件 是什么文件 freemaker「建议收藏」
- java加壳工具_加壳工具 – virbox加密空间站 – OSCHINA – 中文开源技术交流社区
- Java中Ajax学习「建议收藏」
- java%f什么意思_浅析Java中print、printf、println的区别「建议收藏」
- f1 score java_F1 score「建议收藏」
- 计算机软件师社会需求,java软件工程师的社会环境如何?「建议收藏」
- Java文件操作工具类详解编程语言
- 挑战未来:学习Linux与Java(学linux还是java)
- 如何在Linux系统中安装Java(linux中安装java)
- 堆栈探索Java构建Oracle堆栈的可能性(java建oracle)