浅谈Collection集合(1)
了解Collection集合的结构
Collection是一个接口,是java中单列集合。在Java语言开发中有着很重要的地位。
- Collection集合结构
Collection接口下有着List接口和Set接口两大类。
Collection接口中有很多的实现类,这些不同的实现类,使我们在面对不同的问题和算法时,可以以和很快的效率去解决问题,找到问题的最优解!
Collection集合中常用的共性方法
boolean add(E e) | 向集合中添加元素 |
---|---|
bollean remove(E e) | 删除集合中的某个元素 |
void clear() | 清空集合中的所有元素 |
boolean contains(E e) | 判断集合是否包含某个元素 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 获取集合的长度 |
Object[] toArray() | 将集合转换为一个数组 |
- 常用的方法就是上述表格中的,还有一部分是重写过的方法,有很多种类,在这里就不每个列举了!
List集合
List集合的特点:
- 是一个有序的集合。(有序:存储和取出的元素顺序一样)
- 有索引
- 允许存储重复元素
List集合中常用方法:
void add(int index,E element) | 在指定位置插入元素 |
---|---|
E get(int index) | 返回列表中指定的元素 |
E remove(int index) | 移除列表中指定的元素 |
E set(int index,E element) | 替换指定位置的元素 |
数据结构的拓展
我们要想深入的了解集合中的存储结构,就必须去了解几种常见的数据结构。
- 栈:先进先出
- 队列:先进先出
- 数组:
查询快:数组的地址值是连续的,我们通过数组的首地址找到数组,通过数组的索引可以快速的查找到指定元素。
增删慢:数组的长度是固定的,我们要删除一个元素,需要新建一个数组,把原数组的元素复制过来。在堆内存中,我们频繁的创建数组,复制元素,销毁数组,效率很低。- 链表:
查询慢:链表的地址是不连续的,每次查询的时候,都需要从首地址开始
增删快:链表结构,增加/删除一个元素,对整体结构没有影响。所以增删快
【注】:链表中一个元素—一个节点。 节点有三部分:数据、前节点的地址、后节点的地址
*单向链表:链表中只有一条链子,不能保证元素的顺序(存储和取出的顺序相同)
*双向链表:链表中有两条链子,有一条专门记录元素的顺序。所以是一个有序的集合- 红黑树:
特点:趋近于平衡树,查询的速度非常快,查询叶子节点最大次数和最小次数不能超过两倍
ArrayList集合
知道了常用的几种数据结构后,就可以去探索集合的底层存储结构。
ArrayLsit集合的底层存储结构是数组
具有查询快、增删慢的特点。
LinkedList集合
LinkedList集合的底层存储结构是链表。
具有查询慢、增删快的特点。
常用的方法
LinkedList集合包含着许多特有的方法,这些方法便于我们操作列表中的首尾元素。
- 【注意】:LinkedList集合中特有的方法,不能使用多态进行集合的创建,否则会无法调用集合中特有的方法。
void addFirst(E e) | 将指定元素插入到列表的开头 |
---|---|
void addLast(E e) | 将指定元素插入到列表的结尾 |
void push(E e) | 将指定元素推入到集合所表示的栈堆 |
E getFirst() | 返回集合的第一个元素 |
E getLast() | 返回集合的最后一个元素 |
E removeFirst() | 移除集合中的第一个元素 |
E removeLast() | 移除集合中的最后一个元素 |
E pop() | 从集合表示的栈堆中弹出一个元素 |
Vector集合
Vector集合现在已经被ArrayList集合所替代,这里我们就是简单的了解一下。
- Vector内部实现类似于ArrayList集合,其底层也是一个容量能够动态增长的数组,是jdk1.0添加的类。它的很多实现方法都加入了同步语句,因此线程安全。
- (但Vector也只是相对线程安全,有时候还是需要加入同步语句来保证线程的安全)
多谢大家的查阅!