JAVA - 容器详解
一、ArrayList 长度 可变数组 ,类似于c++ STL中的vector. 元素以 线性方式连续存储 ,内部允许存放重复元素。 允许对元素进行随机的快速访问,但是向ArrayList中 插入和删除元素的速度较慢 。 ArrayList是 非线程安全 的,若要成为线程安全,可以使用:List list=Collections.synchronizedList(new ArrayList()); 数组进行扩容时,会将老数组中的元素重新拷贝一份到新的数组中,每次数组容量的增长大约是其原容量的1.5倍。 这种操作的代价是很高的,因此在实际使用时,我们 应该尽量避免数组容量的扩张 。 当我们可预知要保存的元素的多少时,要在构造ArrayList实例时,就指定其容量,以避免数组扩容的发生。 二、LinkedList 内部采用 双向循环链表 实现,类似于c++ STL中的list. 插入和删除元素的速度较快 ,随机访问的速度较慢. LinkedList单独具有addFirst(),addLast(),getFirst(),getLast(),removeFirst()和removeLast()方法. 这些方法使得它 可以作为堆栈、队列和双向队列来 使用. LinkedList也是 非线程安全 的. 三、HashMap 基于哈希表的Map接口实现,类似于c++ STL中的unordered