HashTable:
package mycompare; import java.util.Collection; import java.util.Enumeration; import java.util.Hashtable; public class arrcompare { public static void main(String[] args) { // TODO Auto-generated method stub Hashtable<String,String> hashtable=new Hashtable<>(); //--------插入键值对---------------------------- hashtable.put("张三", "四川"); hashtable.put("李三", "四川"); hashtable.put("李华", "湖南"); //-------遍历所有键----------------------------- System.out.println("-----------遍历完所有键------------"); Enumeration<String> enumeration=hashtable.keys(); while (enumeration.hasMoreElements()) { String string=(String)enumeration.nextElement(); System.out.println(string); } //------遍历所有值------------------------------ System.out.println("-----------遍历完所有值------------"); Collection<String> collection=hashtable.values(); for (String string : collection) { System.out.println(string); } //------获取键值对----------------------------- System.out.println("-----------已获取所有键值对------------"); for (java.util.Map.Entry<String, String> entry : hashtable.entrySet()) { System.out.println("键:"+entry.getKey()+",值:"+entry.getValue()); } //------修改键对应的值-------------------------- if (hashtable.replace("张三", "四川", "山东")) { System.out.println(hashtable.get("张三")); } } } 输出: -----------遍历完所有键------------ 李三 张三 李华 -----------遍历完所有值------------ 四川 四川 湖南 -----------已获取所有键值对------------ 键:李三,值:四川 键:张三,值:四川 键:李华,值:湖南 山东
遍历键值对还有另一个方式:
Iterator iterator=hashtable.entrySet().iterator(); while(iterator.hasNext()) { Map.Entry entry=(Map.Entry)iterator.next(); System.out.println("键:"+entry.getKey()+",值:"+entry.getValue()); } 该方式的效率比上面的方式效率更高。
HashMap的操作与Hashtable基本一致,便不再贴代码。
HashMap是Hashtable的轻量级实现(非线程安全的实现),它们都实现了Map接口(Map中键不可重复,值可以重复)。
Hashtable不允许null作为key、value,当出现null值会抛出异常。
HashMap可以使用null作为key、value,并且null元素会计入size。
Hashtable是线程安全(也就是说Hashtable的方法之间是线程同步的,查看它的源代码可以看到Hashtable的方法都是用synchronized修饰的)的,HashMap非线程安全的。