JDK源码阅读-List接口

270 阅读2分钟

概述

java.util.List接口继承自Collection,且应用了泛型。在源码中其定义为:

public interface List<E> extends Collection<E> {
    ...
}

List主要有两个性质:

  1. List属于有序集合
  2. List允许存放重复元素
    List接口类图

方法

由于List定义了一组有序且可重复的集合,因此在Collection接口方法外还定义了图中用黑框框出来的方法。可分为以下几类

List接口定义的方法

位置相关

get(int): E

返回列表合中指定位置的元素

set(int, E): E

使用指定的元素替换列表合中指定位置的元素,并返回被替换的元素

add(int, E): void

将指定的元素插入列表中的指定位置

add(int, Collection<? extends E>): boolean

将指定集合中的所有元素插入到此列表中的指定位置。将当前位于该位置(如果有的话)的元素和随后的任何元素移动到右边(增加其索引)。新元素将按照指定集合的迭代器返回的顺序显示在此列表中。

remove(int): E

删除列表中指定位置的元素,并返回这个元素。这里有个踩过好多次的坑,要注意remove(int)remove(Object)的区别,后者是在集合Collection中定义的。特别是在声明一个泛型为Integer的List时,即List<Integer>。当调用remove方法时,入参是Integerint类型,意义完全不一样。

搜索相关

indexOf(Object): int

返回列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。

lastIndexOf(Object): int

返回列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。

迭代相关

listIterator(): ListIterator

返回列表的列表迭代器,其中ListIterator继承自Iterator

listIterator(int): ListIterator

从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器。

子集合操作

subList(int, int): List

返回列表中指定区间的部分视图。由于返回的只是原始List的视图,因此在子列表上的非结构的更改将直接作用在原始List中,反之亦然。