Hashmap与Hashtable的区别及应用

一、Hashmap与Hashtable的区别
1.  java.util.Hashtable<K,V>继承java.util.Dictionary<K,V>类,同时实现java.util.Map<K,V>接口;java.util.HashMap继承java.util.AbstractMap抽象类,同时实现java.util.Map接口,但因为AbstractMap也实现了Map接口,所以HashMap的方法基本上都来自Map接口;
2.  Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过java.util.Collections的一个静态方法得到解决:
Java代码
Map Collections.synchronizedMap(Map m) 

Map Collections.synchronizedMap(Map m)
        这个方法返回一个同步的Map,这个 Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3.  在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用 containsKey()方法来判断,并且HashTable中不允许存储null值。
二、应用:
1.hashmap

  HashMap   hm=new   HashMap();
  //Put elements to the map
  hm.put("Evan",new Double(12345.77));
  hm.put("Rose",new Double(78777));
  hm.put("Magic",new Double(-99.10));
  hm.put("Mike",new Double(100.00));
  hm.put("Sue",new Double(17.15));
  //Get a set of the entries
  Set set = hm.entrySet();
  //Get an iterator
  Iterator itr = set.iterator();
  //Display elements
  while (itr.hasNext()){
   Map.Entry me = (Map.Entry)itr.next();
   System.out.println(me.getKey() + ": ");
   System.out.println(me.getValue());


2.hashtable

以哈希表的形式存储数据,数据的形式是键值对.
特点:
查找速度快,遍历相对慢
键值不能有空指针和重复数据

创建
Hashtable<Integer,String> ht=new Hashtable<Integer,String>();

添值

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

取值

String str=ht.get(1);
System.out.println(str);// Andy

对键进行遍历

Iterator it = ht.keySet().iterator();

while (it.hasNext()) {
    Integer key = (Integer)it.next();
    System.out.println(key);
}

对值进行遍历

Iterator it = ht.values().iterator();

while (it.hasNext()) {
    String value =(String) it.next();
    System.out.println(value);
}

取Hashtable记录数

Hashtable<Integer,String> ht=new Hashtable<Integer,String>();

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

int i=ht.size();// 7

删除元素

Hashtable<Integer,String> ht=new Hashtable<Integer,String>();

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

ht.remove(1);
ht.remove(2);
ht.remove(3);
ht.remove(4);

System.out.println(ht.size());// 3


Iterator it = ht.values().iterator();

while (it.hasNext()) {
        // Get value
    String value =(String) it.next();
    System.out.println(value);
}

输出:
3
Green
Edinburg
Felex


你可能感兴趣的:(多线程)