1. 首先我们先讲下 Collection 接口
Collection 接口:
Collection 是最基本的集合接口, 它是由一个独立元素所组成的序列, 这些元素服务一条或多条规则一个 Collection 代表一组 Object, 即 Collection 的元素(Elements)
有些 Collection 允许有相同的元素, 另一些则不允许, 有些可以进行排序, 另一些则也不允许, Java SDK 不提供直接继承 Collection 的接口, 而是继承 Collection 的一些子接口, 如 List,Set 接口
Collection 的一些方法:
2. 然后再说下 List 接口, Set 接口和 Map 接口, 当然顺便提一下 Queue 队列
List 接口:
List 是有序的 Collection, 按照插入的顺序保存元素, 使接口能够精确的控制每个元素插入的位置, 用户能够根据索引来访问 List 中的元素
实现 List 接口的常用类有: LinkedList,ArrayList,Vector 和 Stack
Set 接口:
核心点, Set 是不包含重复元素的 Collection(例: e1 和 e2 都有 e1.equals(e2)=false), 允许有 Null 元素, 但最多只能有一个 Null 元素
Set 容器类主要有 HashSet 和 TreeSet 等
Map 接口:
Map 和 List,Set 接口有所不同, 没有继承 Collection 它是一组成对的键值对对象, 允许通过键来查找值
Map 提供 key 到 value 的映射, 一个 Map 中不能包含有相同的 key, 一个 key 只能映射一个 value(一对一的关系)
实现 Map 接口的常用类有: HashTable,HashMap,WeekHashMap
主要方法:
1.boolean equals(Object o)比较对象
2.boolean remove(Object o)删除一个对象
3.put(Object key,Object value)添加 key 和 value
4.Hashtable 类
Queue 接口:
Queue(又称 "队列")它是一种特殊的线性表, 按照排队规则来确定对象产生的顺序
简单来说就是按照 "先进先出" 规则, 表的前端部分用作删除操作, 后端部分用作插入操作, 前端删除部分称做: 对头; 后端插入部分称做: 队尾如果队列为空的话, 又被称做: 空队列
值得一提的是 LinkedList 也实现了 Queue 接口, 所以也可以把 LinkedList 当做 Queue 来用
3. 一起探索下实现 List 接口的常用类: LinkedList,ArrayList,Vector 和 Stack
LinkedList 类:
LinkedList 实现了 List 接口, 允许 Null 元素, 并且是线程不安全的(非线程安全), 且无法随机访问, 原因就是它的底层是通过链表实现的, 若要从链表中删除或插入某一个对象, 只需要改变前后对象的引用, 所以在速度方面的话相对 ArrayList 要快一些
此外 LinkedList 还提供了一些额外的方法: get(),remove(),insert()用作 LinkedList 的首部和尾部, 这些方法主要可以用作堆栈(stack), 队列(queue), 双向队列(deque)
注意: LinkedList 没有同步方法如果多个线程同时访问一个 List, 则必须自己实现访问同步一种解决方法是在创建 List 时构造一个同步的 List:List list = Collections.synchronizedList(new LinkedList());
ArrayList 类:
ArrayList 实现的是可变大小的数组, 它允许所有元素, 包括 Null 元素, 并且也是线程不安全的(非线程安全), 但是允许随机访问, 原因就是它是数列结构(数组), 此结构本身就适合随机访问
[]数组, Vector,ArrayList 的结构在随机访问, 遍历和获得大小方面都是 O(1)的性能
注意: 和 LinkedList 一样, ArrayList 也是非同步的 (unsynchronized) 一般情况下使用这两个就可以了因为非同步, 所以效率比较高, 如果涉及到堆栈, 队列等操作, 应该考虑用 List, 对于需要快速插入, 删除元素, 应该使用 LinkedList, 如果需要快速随机访问元素, 应该使用 ArrayList
Vector 类:
和 ArrayList 非常的类似, 不同处就是, 它是线程安全的, 由 Vector 创建的 Iterator(迭代器), 本身和 ArrayList 创建的 Iterator(迭代器)是同一个接口, 但因为 Vector 是线程安全的, 所以当一个 Iterator(迭代器)被创建而且在被使用时, 另一个线程会改变 Vector 的状态 (例如: 添加或删除一些元素), 这时候调用 Iterator(迭代器) 的方法时会抛出异常:"ConcurrentModificationException", 因此这个异常必须被捕获
Stack 类:
继承了 Vector, 实现后进先出的堆栈, Stack 提供了 5 个方法让 Vector 当做堆栈被使用, 基本的 push()和 pop()方法, 还有 peek 方法取得栈顶的元素, empty 方法判断堆栈是否为空, search 方法检测一个元素在堆栈中的位置
注: Stack 刚创建后是空栈
来源: http://www.bubuko.com/infodetail-2522658.html