List
List实现了Collection,所以他拥有Collection的全部方法
List 的存储方式如下
用代码展示如下
//使用List的接口 List<String> list = new ArrayList<>();//创建ArrayList的实现类 //List<String> list = new LinkedList<>();//创建LinkedList的实现类 //添加元素 list.add("元素1"); list.add("元素2"); list.add("元素3"); list.add("元素4"); list.add("元素5"); //打印输出集合以及下标为2的元素 System.out.println(list); System.out.println("下标为2:"+ list.get(2)); //删除下标为2的元素 list.remove(2); //打印输出集合以及下标为2的元素 System.out.println(list); System.out.println("下标为2:"+ list.get(2));
输出结果
[元素1, 元素2, 元素3, 元素4, 元素5] 下标为2:元素3 [元素1, 元素2, 元素4, 元素5] 下标为2:元素4
什么时候使用List
- 想要存放一组元素
- 这些元素可能有重复的
如何选择List
常用的有以下两种
ArrayList
- 内部维护了一个数组
- 每一次增加一个元素或者减少一个元素都要重新创建一个数组
- 增加和删除开销大
- 查询和修改速度快
LinkedList
- LinkedList是一个双向链表,
- 添加和删除元素时具有比ArrayList更好的性能。
- 但在元素的查询和修改方面要弱于ArrayList。
List的源码解析
除了Collection的方法之外,LIst也有几个特有的方法
一般来说,我们如果使用集合,只需要使用接口就行了,没必要使用实现类的对象进行操作所以这里只说明List的方法
void replaceAll(UnaryOperator operator)复制代码
将此列表的每个元素替换为运算后该元素的结果。 运算引发的错误或运行时异常将抛出到调用方。
参数:operator - 应用到每一个元素抛出:
UnsupportedOperationException -如果此列表是不可修改的。 实现方式可以引发此异常如果一个元素不能被替换,或者,如果在一般情况下,不支持修改
NullPointerException -如果指定的操作者为空或如果操作者的结果是一个空值,并且此列表不允许null元素内部代码:
default void replaceAll(UnaryOperator<E> operator) { Objects.requireNonNull(operator); final ListIterator<E> li = this.listIterator(); while (li.hasNext()) { li.set(operator.apply(li.next())); } }
void sort(Comparator c)
根据规定产生的顺序排序此列表Comparator 。 排序是稳定的 :这种方法不能重新排序相等的元素。
在这个列表中的所有元素都必须使用指定的比较(即,是可相互比较 c.compare(e1, e2)不得抛出ClassCastException为任何元素e1和e2在列表中)。
如果指定的比较是null则在此列表中的所有元素都必须实现Comparable接口和元素的自然顺序应该被使用。此列表必须是可修改的,但不必是大小可调整。
参数:c -接收Comparator来比较列表元素。 一个null值表示元素的自然顺序 ,应使用抛出:ClassCastException -如果列表中包含使用指定的比较器不可相互比较的元素
UnsupportedOperationException -如果列表中的列表迭代器不支持set操作IllegalArgumentException - 如果比较发现违反Comparator规则
内部代码:
default void sort(Comparator<? super E> c) { Object[] a = this.toArray(); Arrays.sort(a, (Comparator) c); ListIterator<E> i = this.listIterator(); for (Object e : a) { i.next(); i.set((E) e); } } 复
E get(int index)
index是 0~Integer.MAX_VALUE 之间的数字
返回在此列表中指定位置的元素。
参数:index- 该元素的索引返回:在此列表中的指定位置的元素
抛出:
IndexOutOfBoundsException -如果索引超出范围( index < 0 || index >= size() )
E set(int index, E element)复制代码
替换在List中指定下标的元素
参数:
index - 元素的索引,以取代
element - 元素被存储在指定的位置
返回:
在指定的位置之前的元素
抛出:
UnsupportedOperationException -如果set操作不受此列表支持
ClassCastException -如果类指定的元件防止它的被添加到该列表中
NullPointerException -如果指定的元素为null,并且此列表不允许null元素
IllegalArgumentException -如果从指定的元件防止它的某些属性被添加到这个列表
IndexOutOfBoundsException -如果索引超出范围( index < 0 || index >= size() )
void add(int index, E element)
在指定下标的位置插入该元素,并且将原本的元素下标统一向后移动1位
参数:
index - 索引在该指定的元件将被插入
element - 要插入元素
抛出:
UnsupportedOperationException -如果add操作不受此列表支持
ClassCastException -如果类指定的元件防止它的被添加到该列表中
NullPointerException -如果指定的元素为null,并且此列表不允许null元素
IllegalArgumentException -如果从指定的元件防止它的某些属性被添加到这个列表
IndexOutOfBoundsException -如果索引超出范围( index < 0 || index > size() )
E remove(int index)
index是 0~Integer.MAX_VALUE 之间的数字
删除此列表指定的位置的元素。后面元素向左移动。 返回从被删除的元素。
参数:
index - 下标
返回:
被删除的元素
抛出:
UnsupportedOperationException -如果remove操作不受此列表支持
IndexOutOfBoundsException -如果索引超出范围( index < 0 || index >= size() )
int indexOf(Object o)
在List中寻找 o 元素,返会元素第一次出现在List中的索引
找不到返回-1
参数:
o - 要搜索的元素
返回:
指定元素第一次出现在该列表中的索引,找不到返回-1
int lastIndexOf(Object o)复制代码
返回指定元素的最后一次出现在这个列表中的索引,或-1,如果此列表中不包含的元素。 更正式地说,返回满足i这样Objects.equals(o, get(i))或-1,如果没有这样的指标。
函数:o - 要搜索的元素返回:指定的元素,最后一次出现在这个列表中的索引,或-1,如果此列表中不包含的元素抛出:ClassCastException -如果指定元素的类型是不符合这个列表NullPointerException -如果指定的元素为null,并且此列表不允许null元素
ListIterator listIterator()
返回一个列表迭代器
返回:返回一个列表迭代器
ListIterator listIterator(int index)
返回一个从指定下标开始的列表迭代器
参数:index-迭代器的第一个元素的索引返回:返回一个从指定下标开始的列表迭代器抛出:IndexOutOfBoundsException -如果索引超出范围( index < 0 || index > size() )
List subList(int fromIndex, int toIndex)
截取List
List<Object> subList = list.subList(0, 5); //其中subList(0, 5)取得的是下标为0到4的元素,不包含下标为5的元素.
参数:fromIndex - 起始点toIndex -终止点返回:此列表内的所述指定范围的视图抛出:IndexOutOfBoundsException -为一个非法端点指数值( fromIndex < 0 || toIndex > size || fromIndex > toIndex )
static List of(E e1)
返回包含一个元素的不可修改的列表。 见不可修改的列表的详细信息。
参数:e1 - 所述单个元件,可以有多个,也可以不写返回一个空的类型参数:< E > -的List的元素类型返回:一个List包含指定元件抛出:NullPointerException -如果元素是null
static List copyOf(Collection coll)
拷贝一个Collection集合,顺序为迭代器的顺序
参数:
coll - 一个Collection集合
类型参数:
< E > -的List的元素类型
返回:
一个List包含给定的元素Collection
抛出:
NullPointerException -如果为null,或者如果它包含任何空