今天的博客主题
基础篇 --》常用类 --》Java集合类(一)List
上一篇讲解了最顶级的集合类Conllection。
说是集合类不要认为是一个类,只不过是一个总称而已,他其实是一个接口,别混淆了。
List
public interface List<E> extends Collection<E> {}
List也是一个接口,继承了Conllection。是Conllection的一个子接口。
List接口大概的一个结构体系是这样子的
通过源码注释所得: list是一个有序,可重复的集合。
LIst只是一个接口,都是需要子类来实现的,没什么好讲的。具体看子类实现吧
AbstractList
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {}
Collection集合里的一个抽象类,继承了AbstractCollection抽象类,实现类List接口。
是List接口的一个子类。ArrayList的父类。
虽然是个抽象类,但却只有一个抽象方法。
平时根本用不到,只是内部使用的一个类。等以后有时间出文章通过源码去分析这个类的作用。
ArrayList
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable{}
ArrayList继承了AbstractList类,实现了List、RandomAccess、Cloneable、和序列化接口。
ArrayList是List接口的一个实现类。
ArrayList是我们使用最多的一个List集合。
底层数据结构是一个数组队列,相当于动态数组。
特点:
- 容量不固定。(有最大值就是int最大值减8)
- 按照插入顺序来保存元素,可以利用下标来查找值。
- 按照下标访问元素最快。
- 支持元素可以为null。
- 占用空间小。(对比 LinkedList,不占用额外空间来维护链表结构)
- 可以随机访问。
缺点:
- 线程不安全。
- 在中间插入元素慢。
- 删除元素慢。
核心方法(常用API)
public static void main(String[] args) {
// ===核心方法 add(), addAll()
// 声明一个空的集合
List list = new ArrayList();
// 往集合添加一个元素
list.add(0);
// 往集合指定位置添加一个元素
list.add(0,1);
System.out.println(list); // [1, 0]
List list1 = new ArrayList();
list1.add("2");
// 往集合里添加一个集合
list.addAll(list1);
System.out.println(list); // [1, 0, 2]
List list2 = new ArrayList();
list2.add("3");
// 往集合指定位置添加一个集合
list.addAll(0,list2);
System.out.println(list); // [3, 1, 0, 2]
// 这里注意一下,当指定了集合的泛型之后,只能同类型对象的集合使用addAll(),否则在编译时期就会报错
List<String> listStr = new ArrayList();
ArrayList<String> listStr1 = new ArrayList();