[size=large]
转载于:http://www.cnblogs.com/devinzhang/archive/2012/01/13/2321481.html。
并做了些修改。
1. HashMap
1) hashmap的数据结构
Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“),如下图示:
当我们往hashmap中put元素的时候,先根据key的hash值得到这个元素在数组中的位置(即下标),然后就可以把这个元素放到对应的位置中了。如果这个元素所在的位子上已经存放有其他元素了,那么在同一个位子上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。
2)使用
@Test
public void testTraverse(){
Map<String,String> map = new HashMap<String,String>();
map.put("Rajib Sarma","100");
map.put("Rajib Sarma","200");//The value "100" is replaced by "200".
map.put("Sazid Ahmed","200");
Iterator<Map.Entry<String,String>> iter=map.entrySet().iterator();
while(iter.hasNext()){
Map.Entry<String, String> entry = iter.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println("key: "+key);
System.out.println("value: "+value);
}
}
2. HashTable和HashMap区别
第一,继承不同。
public class Hashtable extends Dictionary implements Map
public class HashMap extends AbstractMap implements Map
Dictionary类已过时,新的实现应该实现 Map 接口,而不是扩展此类。Hashtable应该是在java2中引入Map后对其进行了优化。
第二
Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。
但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
同样可以使用ConcurrentHashMap类。
第三
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和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数(便于进行位运算)。
[/size]
- 大小: 62.9 KB
分享到:
相关推荐
以下是对Java中HashMap和Hashtable及HashSet的区别进行了详细的分析介绍,需要的朋友可以过来参考下
Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结
主要介绍了Java中HashMap和Hashtable的区别浅析,本文总结了6条它们之间的不同之处,需要的朋友可以参考下
hashmap和hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。 1. HashMap几乎可以等价于Hashtable,...
HashMap、HashTable和HashSet是Java中常用的数据结构,它们的底层实现原理以及区别如下:HashMap底层实现原理: HashMap基于哈希表(HashTable)实现,它通过散列算法将键值对映射到数组中。在HashMap中,每个键值对...
本篇文章主要介绍了java中HashMap和Hashtable的区别,具有一定的参考价值,有需要的可以了解一下。
HashMap和Hashtable的区别Java开发Java经验技巧共2页.pdf.zip
java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
Java面试题11.HashMap和HashTable的区别.mp4
hashMap和Hashtable的区别1
HashMap和HashTable的区别?但是如果想线程安全有想效率高?
主要介绍了java HashMap和HashTable的区别详解的相关资料,需要的朋友可以参考下
本文主要介绍HashMap 和 Hashtable的工作原理和使用方法,有兴趣的朋友可以参考
以下是对java中ArrayList与Vector的区别以及HashMap与Hashtable的区别进行了详细的解析。需要的朋友可以过来参考下
Hashtable和HashMap的区别: Hashmap是开发中用的比较多的一种集合,是线程不安全的,Hashtable的方法上大多都加了synchronized所以是线程安全的,所以效率并不高。这也是它们最大的不同。 2.Hashtable继承的类和...
HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有...
HashMap,HashTable,ConcurrentHashMap之关联.docx
HashMap和Hashtable两个类都实现了Map接口,二者保存K-V对(key-value对);HashSet则实现了Set接口,性质类似于集合
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...