HashTable与HashMap的区别
1)、HashTable与HashMap实现的是不同的接口
Hashtable是Dictionary的子类
HashMap是Map接口的子类
2)、HashTable的键值都不允许为空,HashMap的键值只允许为空(试验了可以俩个都为空)
package com.txr.oto.fk;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
public class Hash {
public static void testHashTable()
{
Hashtable<String, String> table = new Hashtable<>();
table.put("1", "1");
table.put("2", "2");
table.put("3", "3");
for(Iterator it = table.keySet().iterator();it.hasNext();)
{
String key=(String)it.next();
System.out.println(key+" "+table.get(key));
}
}
public static void testHashMap()
{
Map<String,Integer> map = new HashMap<String,Integer>();
map.put(null, null);
map.put("b", 2);
map.put("c", 3);
/*for(Map.Entry<String,Integer> entry: map.entrySet())
{
System.out.println(entry.getKey().toString()+" "+entry.getValue().toString());
}*/
}
public static void main(String[] args) {
//testHashTable();
testHashMap();
}
}
但是如果给Hashtable赋null会报错
通过上一个例子,我们发现Hashtable与HashMap相同的一点:无序存放
HashMap与HashTable的键值都不能重复,重复value值去后面出现的
3)、俩者的遍历方式大同小异,Hashtable仅仅比HashMap多一个elements方法,这个elements()方法获取的是table的value值不是key值。
Enumeration em=table.elements();
while(em.hasMoreElements())
{
String value=(String)em.nextElement();
System.out.println(value);
}
4)、Hashtable和HashMap都能通过values()方法返回一个Collection,然后进行遍历处理:
Collection c=table.values();
Collection c=map.values();
俩者也都可以通过entrySet()方法返回一个Set,然后进行遍历处理
5)、HashTable使用Enumeration,HashMap使用Iterator
6)、Hashtable是多线程安全的HashMap是非线程安全的
7)、hashtable叫哈希表,是以键值对的形式存储数据的。
hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。
8)、有争议
HashMap是图,HashTable是哈希表,
前者的关键词是,遍历、查找、搜索(如最短路径)
后者的关键词是,冲突处理,排序,
在java中他们的算法都已经是实现好了的,用户只需要往里面存储对象就可以了,两者都是接受Object,传出Object,但是由于他们的算法是大相径庭的,所以处理结果也是不一样的。
前者的关键词是,遍历、查找、搜索(如最短路径)
后者的关键词是,冲突处理,排序,
在java中他们的算法都已经是实现好了的,用户只需要往里面存储对象就可以了,两者都是接受Object,传出Object,但是由于他们的算法是大相径庭的,所以处理结果也是不一样的。