hashmap 与hashtable区别(学习工厂模式笔记)
来源:互联网 发布:淘宝女装店背景图 编辑:程序博客网 时间:2024/06/05 03:28
1 HashMap不是线程安全的(是因为HashMap是没有实现synchronization,多个线程访问会造成混乱)
HashMap是map接口的子类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。
2 HashTable是线程安全。(是因为HashTable,实现同步锁,)
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差
public static void main(String args[]) { HashTable h=new HashTable(); h.put("用户1",new Integer(90)); h.put("用户2",new Integer(50)); h.put("用户3",new Integer(60)); h.put("用户4",new Integer(70)); h.put("用户5",new Integer(80)); Enumeration e=h.elements(); while(e.hasMoreElements()){ System.out.println(e.nextElement()); }
总结:
hashmap
线程不安全
允许有null的键和值
效率高一点、
方法不是Synchronize的要提供外同步
有containsvalue和containsKey方法
HashMap 是Java1.2 引进的Map interface 的一个实现
HashMap是Hashtable的轻量级实现
hashtable
线程安全
不允许有null的键和值
效率稍低、
方法是是Synchronize的
有contains方法方法
、Hashtable 继承于Dictionary 类
Hashtable 比HashMap 要旧
这些都代表了Jav
a中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异。
- hashmap 与hashtable区别(学习工厂模式笔记)
- HashMap与HashTable学习笔记
- Java 学习笔记 05 HashMap 和 Hashtable 区别与联系
- HashMap和Hashtable的区别 ---学习笔记
- HashMap与HashTable区别(Differences between HashMap and Hashtable)
- HashMap 与HashTable 区别
- HashMap与HashTable区别
- Hashtable与HashMap区别
- HashMap与HashTable区别
- hashTable与HashMap区别
- HashMap与HashTable区别
- HashMap与Hashtable区别
- HashMap与HashTable区别
- hashMap与hashTable区别
- HashMap与Hashtable区别
- HashTable与HashMap区别
- hashMap与HashTable区别
- hashmap与hashtable区别
- Js实现一个时间显示器
- 助你快速踏入高薪职场——2017面试集锦之java基础(二)
- 解决@Value注解不能为静态变量赋值
- [RK3288][Android6.0] 调试笔记 --- 系统自带预置第三方APK方法
- 关于PLSQL配置了正确的Oracle客户端但是不能识别tnsnames.ora问题
- hashmap 与hashtable区别(学习工厂模式笔记)
- mysq使用问题记录
- caffe运行mnist出现-bash: ./examples/mnist/train_lenet.sh: usr/bin/env: bad interpreter: No such file问题解决
- 指针部分知识
- SSH spring+struts2+hibernate整合步骤
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- gcc/g++编译优化
- 搞定JAVA消息队列,看我用了几步
- 安卓开发的两种语言比较——Java & Kotlin