HashMap null可以作为键、值保存。Hashtable不行。HashMap.get()返回null既可以表示key不存在,也可以表示key对应值为null.Hashtable.get()返回null表示不存在key。
HashMap线程不安全 Hashtable线程安全。put、get、remove、containsKey、contains...方法上面都加了synchronized。但是对于混合使用时就不是线程安全的了。如:
if(table.contains(key)){
table.remove(key);
}
如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好
ConcurrentHashMap默认分为16个桶。可以16个线程同时执行写、删等常规操作。
他的遍历是new一个新的数组。这样iterator既可以使用老的数据。写的线程也可以并发的完成改变。就不会再抛异常了。
http://www.360doc.com/content/13/0807/16/11947209_305402798.shtml