废话不多说,先上关系图
集合类接口
List接口
List是列表类型,以线性方式存储对象。
List接口的三个典型实现:
- List list = new ArrayList(); //底层数据结构是数组,查询快,增删慢;线程不安全,效率高
- List list = new LinkedList(); //底层数据结构是链表,查询慢,增删快;线程不安全,效率高
- List list = new Vector(); //底层数据结构是数组,查询快,增删慢;线程安全,效率低,几乎已淘汰这个集合
- Stack stack = new Stack(); //Stack是Vector提供的一个子类,用于模拟“栈”这种数据结构(LIFO后进先出)
List接口常用方法:
- add(int index, Object obj):指定索引位置添加元素,后面对象的索引位置相对往后移。
- set(int index, E element):用指定元素替换列表指定位置的元素,返回以前在指定位置的元素。
- indexOf(Object obj):返回对象在列表中第一次出现的索引位置,如果集合不包含该元素则返回-1.
- lastIndexOf(Object obj):返回对象在列表中最后一次出现的索引位置,如果集合不包含该元素则返回-1.
- listIterator():用来获得一个包含所有对象的ListIterator迭代器。
ArrayList
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess,
Cloneable, java.io.Serializable {
//版本号
private static final long serialVersionUID = 8683452581122892189L;
//默认容量
private static final int DEFAULT_CAPACITY = 10;
//空对象数组
private static final Object[] EMPTY_ELEMENTDATA = {};
//默认空对象数组
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
//元素数组,用于存放实际元素,并标记为transient,意味着序列化的时候,此字段不会被序列化。
transient Object[] elementData;
//实际元素大小,默认为0
private int size;
//最大数组容量
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
}构造函数
// 默认构造函数
ArrayList()
// capacity是ArrayList的默认容量大小。当由于增加数据导致容量不足时,容量会添加上一次容量大小的一半。
ArrayList(int capacity)
// 创建一个包含collection的ArrayList
ArrayList(Collection<? extends E> collection)关键函数用法示例
public void test() {
List<String> list = new ArrayList<>();
list.add("a"); //增加元素
list.add(1, "bb"); //指定索引位置增加元素
System.out.println(list.get(0)); //获取指定索引值的元素
System.out.println(list.size()); //获取长度
list.set(1, "ccc"); //修改该索引值
list.remove(1); //移除指定索引值的元素
list.remove("a"); //移除指定元素
List<String> list1 = new ArrayList<>();
list1.add("zzz");
list1.add("xxx");
list.addAll(list1); //增加该collections的所有元素
for (String aList : list) {
System.out.println(aList);
}
list.removeAll(list1); //移除该collections的所有元素
}