一、HashMap和Hashtable的区别
1.共同点:都是双列集合,底层都是哈希算法
2.区别:
- HashMap是线程不安全的,效率高,Hashtable是线程安全的,效率低;
- HashMap可以存储null键和null值,Hashtable不可以存储null键和null值
- HashMap和Hashtable父类是不一样的。HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口
- 对外提供的接口不同 Hashtable比HashMap多提供了elments() 和contains() 两个方法。
⚠️
HashTable已经被淘汰了,不要在代码中再使用它。
简单来说就是,如果你不需要线程安全,那么使用HashMap,
如果需要线程安全,那么使用ConcurrentHashMap
。
二、Iterator
1. 底层原理
2. Java要求集合必须实现Iterable接口,才能使用for-each语法糖遍历该集合的实例。
-
foreach底层采用iterator对元素进行遍历。因为
创建iterator的代价很小
。 -
for-each遍历的集合对象不能为null
. 既然对集合的for-each遍历实际上是使用迭代器,会调用集合对象的iterator()方法获得迭代器,那么,对null集合的for-each遍历,就会在null集合对象上调用方法,势必会抛出空指针异常。 -
for-each遍历时
不能改变正在遍历的集合
. 因为在使用迭代器遍历集合时,不能够改变集合,所以for-each遍历时改变集合,同样会引发ConcurrentModificationException异常。
版权声明:本文为sinat_36277898原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。