/**
-
集合框架体系
Collection父接口 -
List子接口
子类
ArrayList
Vector
Stack
Queue
Deque
ArrayDeque
LinkedList
工具类Collections -
Set子接口
HashSet
TreeSet
Hastable
Map
HashMap
TreeMap
LinkedHashMap -
Queue队列接口
Deque双端子接口
ArrayDeque双端实现类
特点:
对第一个元素和最后一个元素提供了更多方便操作的方法
数据结构是基于数组的双端队列 -
对容量大小可以设置,也是限制的
-
数组双端队列没有容量限制;它们可根据需要增加以支持使用。
-
此类很可能在用作堆栈时快于 Stack,在用作队列时快于 LinkedList。
-
它们不是线程安全的,效率高
-
常用的一种集合
-
- 第一个元素(头部) 最后一个元素(尾部)
-
- 抛出异常 特殊值 抛出异常 特殊值
-
- 插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
-
- 移除 removeFirst() pollFirst() removeLast() pollLast()
-
- 检查 getFirst() peekFirst() getLast() peekLast()
-
-
- Queue 方法 等效 Deque 方法
-
- add(e) addLast(e)
-
- offer(e) offerLast(e)
-
- remove() removeFirst()
-
- poll() pollFirst()
-
- element() getFirst()
-
- peek() peekFirst()
-
-
- 堆栈方法 等效 Deque 方法
-
- push(e) addFirst(e)
-
- pop() removeFirst()
-
- peek() peekFirst()
/
/*
- ArrayList
- 方法使用Collection和List父接口的
- 开发中经常使用集合存储数据,提供很多方便的方法(增删改查)
- 我们在开发中决定选择哪一个集合,就看这个集合的数据结构是什么
- 数据结构:瓶装水装水方便你个人喝水,桶装水装水方便大家喝水
- 某个集合是有自己的数据结构,就决定自己的特点
- 特点:
-
1.底层数据结构是数组(数组有索引,方便你根据索引位置进行查询某个元素)数据结构图
-
2.可以存储null值
-
3.不唯一,允许重复
-
4.存储有序,不是指排序
-
5.线程是不安全的(源码有没有锁)
-
6.效率高的(根据数据结构决定的),决定我们会去使用哪个集合
-
7.添加和删除效率低的,查询和修改是效率高的(数据结构)
-
8.有索引,长度是固定的
-
9.构造一个初始容量为 10 的空列表。
/
/*
- Deque接口的父类是Queue接口,Queue接口的父类是Collection接口
- Deque特点:
- 数据结构是基于双端队列的集合
- 方便操作队头和队尾的方法
- 一个线性 collection,支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。
- 提供插入、移除和检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false,具体取决于操作)。
- 第一个元素(头部) 最后一个元素(尾部)
- 抛出异常 特殊值 抛出异常 特殊值
- 插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
- 移除 removeFirst() pollFirst() removeLast() pollLast()
- 检查 getFirst() peekFirst() getLast() peekLast()
- Queue 方法 等效 Deque 方法
- add(e) addLast(e)
- offer(e) offerLast(e)
- remove() removeFirst()
- poll() pollFirst()
- element() getFirst()
- peek() peekFirst()
- 堆栈方法 等效 Deque 方法
- push(e) addFirst(e)
- pop() removeFirst()
- peek() peekFirst()
/
/*
- LinkedList 强大之处
- 特点:
-
数据结构是链表
-
允许存储null
-
线程不安全的
-
允许重复
-
存储有序
-
查询和修改是效率低的,查询和修改效率高的推荐使用ArrayList(开发中常用的)
-
添加和删除是效率高的,添加和删除效率高的推荐使用LinkedList(开发中常用的)
-
既有List的特点(当List用)
-
又有Stack栈结构的特点(Stack)
-
又有队列结构的特点(Queue)
-
又有双端队列结构的特点(Deque)
/
/*
- Queue
- 特点:队列结构
- 除了基本的 Collection 操作外,队列还提供其他的插入、提取和检查操作。每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,具体取决于操作)。队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。
- 抛出异常 返回特殊值
- 插入 add(e) offer(e)
- 移除 remove() poll()
- 检查 element() peek()
/
/*
- Stack
- Vector父类,Stack是Vector实现类,同时拥有List,Collection上面的父类所有方法的
- 特点:先进后出,数据结构是栈结构,
- Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
- E push(E item) 添加到栈底的方法
- boolean empty() 判断是否为空,为空返回true,否则false
- E peek() 从栈顶获取第一个元素
- E pop() 从栈顶移除第一个元素
- int search(Object o) 查询某个元素 在哪个位置,以1为基数
/
/*
- Vector是List的子类
- 其实是旧版的ArrayList
- ArrayList是Vector的升级版
- 特点:就是和ArrayList一样,也是基于数组
- 方法使用父类的,还有自己的遍历方法和获取元素的方法
- void addElement(E obj) 添加某个元素
- E elementAt(int index) 相当于get(index)
- Enumeration elements() 相当于iterator()旧版迭代器
-
boolean hasMoreElements(); 判断是否有下一个可取的元素
-
E nextElement(); 取出下一个元素
*/