Java集合—List
2019-06-13 本文已影响0人
noobBird
网上找的图
image.png
image.png
add方法
image.png
image.png
因为不破坏结构而且不需要扩容 所以增删速度块
很好的展示了Java中持有对象的分类和继承关系以及分类关系
一 Collection接口
1. Collection接口的超类接口
Collection接口继承于java.lang.Iterable接口
JDK中描述Iterable接口的作用是 实现这个接口的对象允许实现 “for-each loop”循环语句
Iterable有三个待实现的方法:
Iterator<T> iterator():返回泛型对应的迭代器对象
forEach(Consumer<? super T> action) :对Iterable的对内部元素进行遍历,并对元素进行指定的操作
Spliterator<T> spliterator() : 创建并返回一个可分割迭代器
2. Collection接口的一般方法(继承Object方法不赘述比如 hashcode() equals()):
size() :返回当前集合的元素数量
isEmpty():当前集合是否为空
contains(Object o):集合是否包含指定的对象
Iterator<E> iterator() :返回集合中的元素迭代器 继承于父接口的方法
toArray() : 把集合所有元素以数组的形式返回 还有一个指定返回的泛型的重载的方法不赘述
clear():清空集合中所有的元素 会变成空集合 不是null
add(E e): 集合中增加元素 (JDK解释是确保集合是否包含指定的元素 如果集合变化了返回true
集合不允许重复或者已经存在返回false)
remove(Object o):移除一个元素
removeAll(Collection<?> c):移除集合中与指定集合相同的部分
containsAll(Collection<?> c):是否包含指定的集合
addAll(Collection<? extends E> c):增加指定的集合
retainAll(Collection<?> c):保留两个集合的交集
Stream<E> stream():返回以当前集合作为源的 串行Stream对象
Stream<E> parallelStream():返回以当前集合作为源的并行Stream对象
3.常用的子接口
3.1 List接口:一个可重复有序集合 并且允许多个元素为空
replaceAll(UnaryOperator<E> operator): 把运算符应用于每一个元素以改变每个元素
sort(Comparator<? super E> c) :通过指定的Comparator对象 排序
get(int index):返回索引下边对应的元素
E set(int index, E element):改变指定的下标的元素
int indexOf(Object o):返回指定元素在集合中**第一次出现的位置**
lastIndexOf(Object o):返回指定元素在集合中**最后一次出现的位置**
ListIterator<E> listIterator():返回List迭代器 还有个从指定位置的重载方法作用一样的
List<E> subList(int fromIndex, int toIndex):返回指定的子集
3.1.1 ArrayList实现类: 类似一个可变大小的数组,查询快 插入和删除代价高昂,线程不安全
原理:底层是数组
定义了一个数组变量用以存储集合中的元素和数组长度变量用以标识集合的size()
默认创建的数组长度是 10
成员变量.png
数组扩容:如果执行add()方法 数组长度不够 就要执行数组扩容 本质就是创建一个更大的数组然后进行数组的拷贝
ArrayList数组扩容原理
add(E e)原理: 本质也是数组的拷贝 判断数组是否需要扩容 然后进行数组元素赋值 所以插入和删除效率低 因为都新创建一个数组对象
查询效率高:因为数组课已通过下标可以快速定位到堆空间对应的位置 从而获取对象元素
3.1.2 LinkedList实现类: 链表,查询慢 插入和删速度快,线程不安全
原理:是一个双向链表
image.png
get(Index)原理:
因为是双向链表 可以看出其实是没有下标索引的
image.png
所以链表的查询其实是一直遍历下去一直到 要找的索引值那里
所以LinkedList 查询较慢慢 一直在遍历
set方法
image.png
add方法
image.png
image.png
因为不破坏结构而且不需要扩容 所以增删速度块