java-集合

  • Post author:
  • Post category:java



一、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 版权协议,转载请附上原文出处链接和本声明。