每次看到HashMap和Hashtable感觉很像,但是又不一样,要我说出个因为所以然啦还真的说不出来,索性整理出来,便于以后查阅!
一、HashMap和Hashtable的区别
1、Hashtable 的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap。
2、 Hashtable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)
3、Hashtable这个类的命名不遵循Java API 命名规范,第二个单词首字母小写。--也算一个吧
4、哈希值使用不同,Hashtable直接使用对象的hashcode。代码如下:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap需要重新计算hash值。代码如下:
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
indexFor()方法:
static int indexFor(int h, int length) {
return h & (length-1);
}
二、遍历Hashtable和HashMap
遍历 Hashtable 有四种方法:
1、 直接toString() 方法 获取的是 字符串性质的键值对
2、 通过枚举Enumeration
//通过枚举实现遍历
Enumeration em = hashtable.elements();
while(em.hasMoreElements()){
System.out.println(em.nextElement());
}
3、 通过entrySet() 方法返回一个 Set , 然后进行遍历处理
//通过set 获取 遍历
Iterator it2 = hashtable.entrySet().iterator();
while(it2.hasNext()){
Map.Entry en = (Map.Entry)it2.next();
System.out.println(en.getKey());
System.out.println(en.getValue());
}
4、 遍历Hashtable的值:
Collection coll = hashtable.values();
Iterator it = coll.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
遍历HashMap的三种方法:
1、 直接toString(),返回的是字符串性质的键值对!
2、 使用entrySet() 返回一个set,进行遍历
//通过set 获取 遍历
Iterator it3 = map.entrySet().iterator();
while(it2.hasNext()){
Map.Entry en = (Map.Entry)it3.next();
System.out.println(en.getKey());
System.out.println(en.getValue());
}
3、 遍历值
//获取所有的value 值
Collection coll1 = map.values();
Iterator it1 = coll1.iterator();
while(it1.hasNext()){
System.out.println(it1.next());
}
分享到:
相关推荐
经典讲解List和ArrayList和Vector和HashTable和HashMap区别
Hashtable和HashMap区别以及他们的具体介绍
hashtable和hashmap的区别
Hashtable和HashMap的区别: 1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类; 2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的...
记得刚毕业那会准备面试,看过不少面试题,里面有个说出HashMap和HashTable不同的题目,我那会面试的时候也遇到不少次这个问题,还隐约记得当时的回答是这样的: HashTable是比较旧的版本;HashTable是线程安全的,...
HashTable和HashMap主要的区别有:线程安全性,同步(synchronization),以及速度。接下来通过本文给大家简单介绍下HashTable和HashMap的区别,需要的的朋友参考下吧
比较分析Vector、ArrayList和hashtable hashmap数据结构
HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有...
HashMap和HashTable都基于哈希表实现,但是它们在使用和性能上存在一些差异。具体来说,HashMap是非同步的,而HashTable是同步的。因此,在多线程环境下,HashTable比HashMap更安全,但是性能可能较差。此外,...
Hashtable和HashMap的区别: Hashmap是开发中用的比较多的一种集合,是线程不安全的,Hashtable的方法上大多都加了synchronized所以是线程安全的,所以效率并不高。这也是它们最大的不同。 2.Hashtable继承的类和...
java中Hashtable和HashMap的区别分析,需要的朋友可以参考一下
List、ArrayList、Vector及map、HashTable、HashMap分别的区别
HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap...
比较Vector、ArrayList和hashtable hashmap
HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现) ,他们都完成了Map接口 主要区别在于HashMap允许空(null) 键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap...
第9讲 对比Hashtable、HashMap、TreeMap有什么不同?1
HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许...
Java中List、ArrayList、Vector及map、HashTable、HashMap分别的区别.
HashTable不支持空键值对! 而HashMap支持空键值对!
hashMap和hashTable的区别,大家可以下载学习学习。