首先请先阅读这两个的源码。
一、hashMap、hashTable都是Map接口的实现类,但是hashMap类继承自抽象类abstractMap类,hashTable继承自
Dictionary类,该类在jdk中这样描述:
可见该类已经过时。
二、hashTable里面的方法都是同步的,实现同步的方法是synchronized,hashMap是非同步的,但也可以使用Collections
类中的静态方法使其变得同步。因此在单线程程序中hashMap的效率要高于hashTable,如果在多线程程序中,可以考虑使用
hashTable
三、hashTable不允许有null的键和值,hashMap允许有空的键和值
四、hashMap的遍历是使用方法keySet()返回一个保存有所有键的Set视图,然后用迭代器进行遍历,采用的是fail-fast机制。
hashTable的遍历可以使用elements()返回值的枚举,也可以使用
entrySet()
keySet()
values()返回键的Collection视图,
也可以使用
keys()返回键的枚举。总之使用迭代器遍历的都是fail-fast机制,用枚举遍历就不是了,尽量还是得使用迭代器。
import java.util.Enumeration;import java.util.Hashtable;public class Test implements Cloneable { public static void main(String[] args) { Hashtable<String,String> ht = new Hashtable<>(); ht.put("a", "1"); ht.put("b", "2"); ht.put("c", "3"); Enumeration<String> e = ht.keys(); while(e.hasMoreElements()) { ht.remove("b"); System.out.println(ht.get(e.nextElement())); } }}
结果:
null13
點擊查看更多內(nèi)容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦