集合总结
集合继承结构图_Collection 部分
集合继承结构图_Map 部分
1.1 主要集合概述
Java 集合主要有 3 种重要的类型:
List:是一个有序集合,可以放重复的数据
Set:是一个无序集合,不允许放重复的数据
Map:是一个无序集合,集合中包含一个键对象,一个值对象,
键对象不允许重复,值对象可以重复(身份证号—姓名)
1.2 Collection 和 Iterator
boolean add(E o)
确保此 collection 包含指定的元素(可选操作)。
boolean addAll(Collection<? extends E> c)
将指定 collection 中的所有元素都添加到此
collection 中(可选操作)。
void clear()
移除此 collection 中的所有元素(可选操作)。
boolean contains(Object o)
如果此 collection 包含指定的元素,则返回 true。
boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有
元素,则返回 true。
boolean equals(Object o)
比较此 collection 与指定对象是否相等。
int hashCode()
返回此 collection 的哈希码值。
boolean isEmpty()
如果此 collection 不包含元素,则返回 true。
Iterator<E> iterator()
返回在此 collection 的元素上进行迭代的迭代器。
boolean remove(Object o)
从此 collection 中移除指定元素的单个实例,如果存
在的话(可选操作)。
boolean removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection
中的所有元素(可选操作)。
boolean retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定
collection 的元素(可选操作)。
int size()
返回此 collection 中的元素数。
Object[] toArray()
返回包含此 collection 中所有元素的数组。
<T> T[] toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组
的运行时类型与指定数组的运行时类型相同。
关于 Iterator 接口说明,Iterator 称为迭代接口,通过此接口可以遍历集合中的数据,此接口主
要方法为:
boolean hasNext()
如果仍有元素可以迭代,则返回 true。
E next()
返回迭代的下一个元素。
面试题
1. ArrayList 和 LinkedList 有何区别?
ArrayList 和 LinkedList 两者都实现了 List 接口,但是它们之间有些不同。
(1)ArrayList 是由 Array 所支持的基于一个索引的数据结构,所以它提供对元素的随机访
问,复杂度为 O(1),但 LinkedList 存储一系列的节点数据,每个节点都与前一个和下一个
节点相连接。所以,尽管有使用索引获取元素的方法,内部实现是从起始点开始遍历,遍
历到索引的节点然后返回元素,时间复杂度为 O(n),比 ArrayList 要慢。
(2)与 ArrayList 相比,在 LinkedList 中插入、添加和删除一个元素会更快,因为在一个
元素被插入到中间的时候,不会涉及改变数组的大小,或更新索引。
(3)LinkedList 比 ArrayList 消耗更多的内存,因为 LinkedList 中的每个节点存储了前后节
点的引用。
2. HashMap 和 HashTable 有何不同?
(1)HashMap 允许 key 和 value 为 null,而 HashTable 不允许。
(2)HashTable 是同步的,而 HashMap 不是。所以 HashMap 适合单线程环境,
HashTable 适合多线程环境。
(3)在 Java1.4 中引入了 LinkedHashMap,HashMap 的一个子类,假如你想要遍历顺序,
你很容易从 HashMap 转向 LinkedHashMap,但是 HashTable 不是这样的,它的顺序是不
可预知的。
(4)HashMap 提供对 key 的 Set 进行遍历,因此它是 fail-fast 的,但 HashTable 提供对
key 的 Enumeration 进行遍历,它不支持 fail-fast。
(5)HashTable 被认为是个遗留的类,如果你寻求在迭代的时候修改 Map,你应该使用
CocurrentHashMap。