一、前言:
本文是力求将这几点讲的通俗易懂,让大家同时也让自己在基础上,更加牢固点。
Collection 有序的集合
├------List 接口
│ ├LinkedList 链表 (异步, 线程非安全)
│ ├ArrayList 顺序结构动态数组类 (异步, 线程非安全)
│ └Vector 向量(同步, 线程安全)
│ └Stack 栈
└Set 接口
Map 接口
├Hashtable (同步, 线程安全)
├HashMap (异步, 线程非安全)
└WeakHashMap
上图,给出了它们之间的关系。
二、作用:
2.1 List, ArrayList, LinkedList, Vector
List是一个有序的集合(collection),它是一个接口(interface),而LinkedList, ArrayList, Vector都是List的实现。
LinkedList & ArrayList介绍
(1) LinkedList是一个链表结构;ArrayList是一个数组结构。
(2) LinkedList的链表特性,其添加/删除某个元素不用移动数据,且遍历只能顺序遍历;
ArrayList的数组特性正好与链表特性相反,添加/删除某个元素需要移动它之后的数据,
不过,由于是有序的,所以遍历可以采用如二分查找来快速定位。
注:ArrayList实现了可变大小,当需要添加N个元素时,可调用ensureCapacity方法来
提高效率。
(3) 由于两者都是异步,所以导致线程不安全:即多个线程可以同时读/写,但这时需要自己来做同步方法。
Vector介绍
与ArrayList类似,只不过它是同步,线程安全的,当一个线程占用并使用时,另一个线程改变其状态会导致
异常ConcurrentModificationException。
Stack介绍
从图中可以看出,Stack是继承Vector的,它实现了LIFO(Last In First Out,后进先出),扩展Vector并
实现了push和pop功能,以及其它几种方法。
2.2 Map, HashMap, HashTable
Map没有继承Collection,它提供了Key-Value即键值映射,一个Map中,不能有相同的Key,且每个Key只能
有一个Value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一
组key-value映射。
HashMap & HashTable介绍
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。
但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap 的
容量成比例。
WeakHashMap介绍
它是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。