Java高级特性-第一章集合框架和泛型
集合框架和泛型
1 查询标题
1.1 认识集合
如果想存储多个同类型的数据,可以使用数组来实现,但是使用数组存在如下明显的缺陷:
- 数组长度固定不变
- 可以通过数组名.length获取数组长度,却无法直接获取数组中实际存储的元素个数
Java的集合主要由Map接口和Collection接口派生而来,其中Collection接口有两个常用的子类,即List接口和Set接口
1.2 List接口
Collection接口是最基本的集合接口,可以存储一组不唯一,无序的对象,List接口继承Collection接口,也就是所List可以存储一组不唯一,有序的对象
List接口常用的实现类由ArrayList和LinkedList
1.2.1 ArrayList类
针对数组的一些缺陷,java集合框架提供了ArrayList集合类,对数组进行了封装,实现了长度可变的数组,而且采用了和数组相同的存储方式,在内存中分配连续的内存空间,并且添加的的数据都会转换Object类型
ArrayList类提供了很多的方法如下:
方法 | 说明 |
---|---|
boolean add(Object o) | 将指定的元素添加到此列表的尾部。 |
void add(int index, E element) | 将指定的元素插入此列表中的指定位置。 |
int size() | 返回此列表中的元素数 |
E get(int index) | 返回此列表中指定位置上的元素。 |
E set(int index, E element) | 用指定的元素替代此列表中指定位置上的元素。 |
boolean contains(Object o) | 如果此列表中包含指定的元素,则返回 true。 |
int indexOf(Object o) | 返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。 |
boolean remove(Object o) | 移除此列表中首次出现的指定元素(如果存在)。 |
E remove(int index) | 移除此列表中指定位置上的元素。 |
ArraryList的优点
- 使用使用索引直接获取元素
- 便利元素和随机访问元素的效率比较高
缺点:
- 采用里数组相同的存储方式,添加和删除都会造成后面所有元素移动
1.2.2 LinkedList类
LinkedList类是List接口的链表列表实现类,允许元素值是任何数据,包括null
LinkedList类采用链表方式存储数据,优点:
- 插入,删除元素效率比较高
缺点:
- 查询效率低下
方法 | 说明 |
---|---|
void addFirst(E e) | 将指定元素插入此列表的开头。 |
void addLast(E e) | 将指定元素添加到此列表的结尾。 |
E getFirst() | 返回此列表的第一个元素。 |
E getLast() | 返回此列表的最后一个元素。 |
E removeFirst() | 移除并返回此列表的第一个元素 |
E removeLast() | 移除并返回此列表的最后一个元素。 |
1.3 Set接口
Set接口