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<String, String> hashMap = new HashMap<String, String>();
        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<Entry<String, String>> sets = hashMap.entrySet();

        for (Entry<String, String> 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<String,String> hashtable=new Hashtable<String,String>();
        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<String> 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<Entry<String, String>> iterator=hashtable.entrySet().iterator();iterator.hasNext();){
        Entry<String,String> entry=iterator.next();
        System.out.println("key---------"+entry.getKey());
        System.out.println("value------------"+entry.getValue());
        }
        //第三种hashtable遍历方式
        System.out.println("第三种遍历方式");
        for(Map.Entry<String, String> entry: hashtable.entrySet()){
        System.out.println("key---------"+entry.getKey());
        System.out.println("value--------"+entry.getValue());
        }
        //第四种遍历方式
        System.out.println("第四种遍历方式");
        Enumeration<String> 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<String> 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使用示例及区别


推荐阅读
cjavapy编程之路首页