开发手册 欢迎您!
软件开发者资料库

Java HashMap Hashtable区别使用方法及示例代码

本文主要介绍Java中,HashMap和Hashtable之间的四种区别,以及使用它们的遍历和存储数据相关的示例代码。

1、Hashtable和Hashtable区别

1)使用null值区别

Hashtable中,keyvalue都不允许出现null值。但是如果在Hashtable中有类似put(null,null)的操作,编译同样可以通过,因为keyvalue都是Object类型,但运行时会抛出NullPointerException异常,这是JDK的规范规定的。

HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

2)代码实现区别

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

3)线程安全

HashMap是非synchronized,而Hashtablesynchronized,说明Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。(在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(Collections.synchronizedMap)

4)访问速度

由于HashMap非线程安全,在只有一个线程访问的情况下,效率要高于HashTable

2、使用示例代码

1)HashMap使用

import java.util.HashMap;import java.util.Iterator;import java.util.Map.Entry;import java.util.Set;public class HashMapUse {    public static void main(String[] args) {        HashMap hashMap = new HashMap();        hashMap.put("c", "c编程");        hashMap.put("java", "java编程");        hashMap.put("python", "python编程");        System.out.println(hashMap);        System.out.println("cn" + hashMap.get("c"));        System.out.println(hashMap.containsKey("c"));        System.out.println(hashMap.keySet());        System.out.println(hashMap.isEmpty());        //hashMap.remove("c");        //System.out.println(hashMap.containsKey("c"));        //使用Iterator遍历HashMap        Iterator it = hashMap.keySet().iterator();        while (it.hasNext()) {            String key = (String) it.next();            System.out.println("key:" + key);            System.out.println("value:" + hashMap.get(key));        }        //使用Entry遍历HashMap        Set> sets = hashMap.entrySet();        for (Entry entry : sets) {            System.out.println(entry.getKey() + ", ");            System.out.println(entry.getValue());        }    }}

2) Hashtable使用

import java.util.Enumeration;  import java.util.HashMap;  import java.util.Hashtable;  import java.util.Iterator;  import java.util.Map;  import java.util.Set;  public class HashMapTable {      public static void main(String[] args) {           Hashtable table = new Hashtable();                    table.put("table_key_1", "table_value_1");          table.put("table_key_2", "table_value_2");          //HashMap 和Hashtable 中元素在遍历的时候是后进先出,栈的结构          for( Enumeration e = table.keys(); e.hasMoreElements(); ){              String key = (String)e.nextElement();              System.out.println( key + "=====" + table.get(key));          }  Hashtable hashtable=new Hashtable();        hashtable.put("1", "aa");        hashtable.put("2", "bb");        hashtable.put("3", "cc");        System.out.println(hashtable.get("3"));System.out.println(hashtable.get("2"));        //第一种hashtable遍历方式        System.out.println("第一种遍历方式");        for(Iterator iterator=hashtable.keySet().iterator();iterator.hasNext();){        String key=iterator.next();        System.out.println("key-----"+key);        System.out.println("value--------"+hashtable.get(key));        }        //第二种hashtable遍历方式        System.out.println("第二种遍历方式");        for(Iterator> iterator=hashtable.entrySet().iterator();iterator.hasNext();){        Entry entry=iterator.next();        System.out.println("key---------"+entry.getKey());        System.out.println("value------------"+entry.getValue());        }        //第三种hashtable遍历方式        System.out.println("第三种遍历方式");        for(Map.Entry entry: hashtable.entrySet()){        System.out.println("key---------"+entry.getKey());        System.out.println("value--------"+entry.getValue());        }        //第四种遍历方式        System.out.println("第四种遍历方式");        Enumeration e=hashtable.keys();        while(e.hasMoreElements()){        String key=e.nextElement();        System.out.println("key-----"+key);        System.out.println("value-------"+hashtable.get(key));        }        //第五中遍历方式(获取所有的值)        System.out.println("第五种遍历方式");        Enumeration e2=hashtable.elements();        while (e2.hasMoreElements()) {        String string = (String) e2.nextElement();        System.out.println(string);    }  }  

相关文档:

Java 静态(static) Map字典初始化方法及示例代码

Java 使用for和while循环遍历hashmap的方法及示例代码

Java使用hashmap中的数据初始化hashmap并执行put数据的简洁代码

Java hashmap computeIfAbsent()使用方法及示例代码

Java中 static final修饰hashmap静态成员变量初始化方法

Java SynchornizedMap(Map)和ConcurrentHashMap使用示例及区别