关于HashMap和Hashtable的区别
Hashtable的应用非常广泛,HashMap是新框架中用来代替Hashtable的类,也就是说建议使用HashMap,不要使用Hashtable。可能你觉得Hashtable很好用,为什么不用呢?这里简单分析他们的区别。
1.Hashtable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。
查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有 synchronized 关键字,而HashMap的源代码中则连 synchronized 的影子都没有,当然,注释除外。
2.Hashtable不允许 null 值(key 和 value 都不可以),HashMap允许 null 值(key和value都可以,但是key只能有一个为空)。
3,关于两者的遍历方式大同小异,Hashtable仅仅比HashMap多一个elements方法。
/**a test for Hashtable values can or not be null**/
public class Test {
public static void main(String[]args){
Hashtable<String,String> table=new Hashtable<String,String>();
table.put("a-key","a-values");
table.put("b-key","b-values");
table.put("c-key","c-values");
//table.put("d-key",null);//java.lang.NullPointerException
//System.out.print(table);
/**用values的方式遍历**/
Collection zzy=table.values();
Iterator it=zzy.iterator();
while(it.hasNext()){
String obj=(String)it.next();
System.out.println(obj);
}
/**用entrySet的方式遍历**/
Set set = table.entrySet();
Iterator its = set.iterator();
while (its.hasNext()) {
Entry entry = (Entry) its.next();
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
}
/**a test for HashMap values can or not be null**/
public class Test1 {
public static void main(String[]args){
HashMap<String,String> table=new HashMap<String,String>();
table.put("a-key","a-values");
table.put("b-key","b-values");
table.put("c-key","c-values");
table.put(null,null);
table.put("d-key",null);//java.lang.NullPointerException
//System.out.print(table);
/**用values的方式遍历**/
Collection zzy=table.values();
Iterator it=zzy.iterator();
while(it.hasNext()){
String obj=(String)it.next();
System.out.println(obj);
}
/**用entrySet的方式遍历**/
Set set = table.entrySet();
Iterator its = set.iterator();
while (its.hasNext()) {
Entry entry = (Entry) its.next();
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
}
4.HashTable使用Enumeration,HashMap使用Iterator
以下这两点是从内部实现机制上来进行比较
5.哈希值的使用不同
6.Hashtable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
关于HashMap和Hashtable的区别的更多相关文章
- java面试题——HashMap和Hashtable 的区别
一.HashMap 和Hashtable 的区别 我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Clonea ...
- Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、
特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣) ...
- hashMap和hashTable的区别
每日总结,每天进步一点点 hashMap和hashTable的区别 1.父类:hashMap=>AbstractMap hashTable=>Dictionary 2.性能:hashMap ...
- java分享第七天-01(Hashmap和Hashtable的区别&Property)
一.Hashmap和Hashtable的区别 1 主要:Hashtable线程安全,同步,效率相对低下 HashMap线程不安全,非同步,效率相对高 2 父类:Hashtable是Dictionary ...
- HashMap和Hashtable的区别 源码分析
一:以前只知道HashMap和HashTable区别,死记硬背的记住HashMap 允许key value为空 而Hashtable 不允许为空 HashMap线程是非线程安全的,而Hashtable ...
- Java 集合系列 11 hashmap 和 hashtable 的区别
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- HashMap与HashTable的区别、HashMap与HashSet的关系
http://blog.csdn.net/wl_ldy/article/details/5941770 HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是 ...
- 面试题·HashMap和Hashtable的区别(转载再整理)
原文链接: Javarevisited 翻译: ImportNew.com- 唐小娟 译文链接: http://www.importnew.com/7010.html HashMap和Hashtabl ...
- java中的hashmap与hashtable的区别
HashMap和Hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别.主要的区别有:线程安全性,同步(synchronizatio ...
- HashMap和Hashtable的区别--List,Set,Map等接口是否都继承自Map接口--Collection和Collections的区别
面试题: 1.HashMap和Hashtable的区别? HashMap:线程不安全,效率高,键和值都允许null值 Hashtable:线程安全,效率低,键和值都不允许null值 ArrayList ...
随机推荐
- golang的json序列化问题
首先看一段代码: package main import ( "encoding/json" "fmt" ) type Result struct { //st ...
- activiti获取可回退的节点
在处理流程回退时,需要获取某个节点当前可以回退到的节点,简单分析下: 1. 只支持回退到userTask. 2. 如果流程流转过某节点时生成了多个任务,从其中某一个任务回退到该节点后,不处理另外的任务 ...
- Linux下编辑、编译、调试命令总结——gcc和gdb描述
GCC gcc是linux系统集成的编译器.在linux环境下编辑程序,首先需要克服的便是没有集成开发环境的一键式操作所带来的麻烦.这其中涉及命令行操作.编译选项的设定.文件依赖关系的书写(makef ...
- C#的list和arry相互转化
,从System.String[]转到List<System.String> System.String[] str={"str","string" ...
- VCS双机+oracle 11gR2+ASM主机名修改
----------------------------------------------------------------------------VCS修改主机名---------------- ...
- ansible-task模块写法归类
转载: https://blog.csdn.net/pushiqiang/article/details/78249665
- P2665 [USACO08FEB]连线游戏Game of Lines
本着dp的心情,结果是道水题STL set就行了 题意:看有多少种斜率(题在那里半天说多少直线(不平行的)),其实就是找斜率的种类 #include<cstdio> #include&l ...
- 编写简单Linux内核模块
模块代码如下 //main.c #include <linux/kernel.h> #include <linux/module.h> #include <linux/i ...
- curl NSS error -8179 (SEC_ERROR_UNKNOWN_ISSUER)
尝试分析 首先根据提示,我判断是CA证书过期.于是对证书进行了更新 update-ca-trust 但是依然没有解决问题.之后,尝试了很多方法后,重新回来想想,为什么不适用curl -v来获取更多信息 ...
- eaeyui-combobox实现组合查询(即实现多个值得搜索)
2015年9月1日,今天要实现下拉框的组合查询功能,即可以再下拉框中选择多个值,输入框中每个值之间有逗号隔开,传到后台,由split函数将其分割开,组合成数组,在由sql查询. 实现的效果是: 当时在 ...