# 集合知识梳理
## 概述:
集合就是Java的一种容器,能够用来存储对象
## Collection(单列集合)
### List
- #### 关于List的相关概念
1. List接口继承了Collection接口。
2. List在Collection基础上增加了其它方法
3. List中的元素是有序且可以重复的。
4. List是一个带有索引的集合。可以通过索引获取List中的元素
5. List的实现
|-----List
|-----ArrayList
|-----LinkedList
|-----Vector
6. 遍历list中的数据的方式 ①增强for循环 ②迭代器 ③普通for循环 ④ListIterator
```java
//增强for循环的遍历方式
//使用迭代器遍历集合
//使用 ListIterator 遍历集合
```
- #### ArrayList
- 说明:
1. ArrayList 的底层是数组
2. 构造器
```java
//底层是一个空的数组并不是为null
new Array();
//底层创建了一个长度为initialCapacity长度的数组
new ArrayList(int initialCapacity);
//底层将c集合变成一个数组然后底层就开始使用此数组
new ArrayList(Collection c);
```
3. ArrayList 的底层实现原理
- 当我们通过空参构造器创建对象时底层会创建一个空数组。当我们第一次添加数据时底层会再次创建数组(长度为10), 将原数组中的内容拷贝到新的数组中(第一次没有元素)。
- 当我们向集合中添加第十一个元素时底层会进行扩容,扩容为原来的1.5倍,并将原来数组中的内容拷贝到新数组。
- #### LinkedList
- 说明
1. LinkedList的底层是`双向链表`。
2. LinkedList实现了Deque接口。Deque接口继承了Queue接口。
- Queue : 单向队列 (实现队列的效果)
```java
// Deque : 双向队列 (可以实现栈的效果也可以实现队列的效果)
public void test(){
//栈 :先进后出
Deque list = new LinkedList();
//压栈
list.push("a");
list.push("b");
//出栈,返回出栈的元素,可以直接打印输出
list.pop();
}
```
- Deque : 双向队列 (可以实现栈的效果也可以实现队列的效果)
```java
// Deque : 双向队列 (可以实现栈的效果也可以实现队列的效果)
public void test2(){
//队列 :先进先出
Deque list = new LinkedList();
//入队
list.offer("a");
list.offer("b");
//出队
list.poll();
}
// Queue : 单向队列 (实现队列的效果)
public void test3(){
Queue list = new LinkedList();
//入队
list.offer("a");
list.offer("b");
//出队 ,先进先出, 出队的方法是poll();
list.poll();
}
```
- 常见的LinkedListAPI
```java
void addFirst(Object obj ) //在头部添加元素
void addLast(Object obj ) //在尾部添加元素
Object getFirst() //获取头部元素
Object getLast() //获取尾部元素
Object removeFirst() //删除头部元素并返回
Object removeLast () //删除尾部元素并返回
```
- #### Vector
### Set
- #### HashSet
- ##### LinkedHashSet
- #### TreeSet
## Map(双列集合)
### HashMap
- #### LinkedHashMap
### TreeMap
### Hashtable
- #### Properties