java集合框架----List 源码分析

List 简述

Java.util.List 是 Collection 的子接口。它是一个有序集合,可以存储重复的值。由于List保留可插入元素的位置的控制,因此它可以按索引访问元素,也可以搜索列表中的元素。
List的一些重要特点有:

  • List 接口是 Java Collections Framework 的成员。
  • List 允许添加重复元素
  • List允许拥有’null’元素
  • List接口在Java 8中有许多默认方法,例如replaceAll,sort和spliterator
  • 列表索引从0开始,就像数组一样
  • List支持泛型,我们应尽可能使用它。 将Generics与List一起使用将在运行时避免ClassCastException

List 类图

List接口扩展了 Collection 接口。 Collection 接口又扩展了 Iterable接口
在这里插入图片描述一些最常用的 List 实现类有: ArrayList,LinkedList,Vector,Stack,CopyOnWriteArrayList。

AbstractList 提供了List接口的重要方法实现,以减少实现List的工作量

List常用的方法

返回类型方法说明
intsize()获取列表中的元素数量,如果此列表元素个数大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE
booleanisEmpty()检查列表是否为空
booleancontains(Object o)如果此列表包含指定的元素,则返回true
Iteratoriterator()以适当的顺序返回此列表中元素的迭代器
Object[]toArray()()以适当的顺序返回包含此列表中所有元素的数组
T[]toArray(T[] a)以适当的顺序返回包含此列表中所有元素的数组; 返回数组的类型是指定数组的运行时类型
booleanadd(E e)将指定的元素追加到此列表的末尾
booleanaddAll(Collection<? extends E> c)将指定集合中的所有元素按指定集合的迭代器(可选操作)返回的顺序追加到此列表的末尾。如果操作正在进行时修改了指定的集合,则此操作的行为是不确定的
booleanaddAll(int index, Collection<? extends E> c)将指定集合中的所有元素插入到此列表指定位置。将当前位置的元素(如果有)和任何后续元素向右移动。新元素将按照指定集合的迭代器返回的顺序出现在此列表中。如果在操作正在进行时修改了指定的集合,则此操作的行为是不确定的。
booleanremove(Object o)从此列表中删除第一次出现的指定元素。
Eremove(int index)删除此列表中指定位置的元素。 将任何后续元素向左移位。 返回从列表中删除的元素
booleanremoveAll(Collection<?> c)从此列表中删除指定集合中包含的所有元素
booleanretainAll(Collection<?> c)仅保留此列表中包含在指定集合中的元素
voidclear()从列表中删除所有元素
booleancontainsAll(Collection<?> c)如果此列表包含指定集合的所有元素,则返回true。
Eget(int index)返回列表中指定位置的元素
voidadd(int index, E element)将指定元素插入此列表中的指定位置。 将当前位于该位置的元素(如果有)和任何后续元素向右移动。
intindexOf(Object o)返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1
intlastIndexOf(Object o)返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回-1
Eset(int index, E element)用指定的元素替换列表中指定位置的元素
ListIteratorlistIterator()从列表中的指定位置开始,返回列表中元素的列表迭代器(按正确顺序)。 指定的索引指示初始调用next时将返回的第一个元素。 对previous的初始调用将返回指定索引减去1的元素
ListsubList(int fromIndex, int toIndex)从列表中的指定位置开始,返回列表中元素的列表迭代器(按正确顺序)。 指定的索引指示初始调用next时将返回的第一个元素。 对previous的初始调用将返回指定索引减去1的元素
ListIteratorlistIterator()返回指定 fromIndex(包含)和 toIndex(不包含)之间此列表部分的元素。如果fromIndex和toIndex相等,则返回的列表为空
voidreplaceAll(UnaryOperator operator)将该列表的每个元素替换为将运算符应用于该元素的结果。 当抛出错误或运行时异常时,将返回给调用者。
voidsort(Comparator<? super E> c)根据指定的比较器对此列表进行排序。此列表中的所有元素必须使用指定的比较器进行相互比较(即,c.compare(e1,e2)不得为列表中的任何元素e1和e2抛出 ClassCastException)
Spliteratorspliterator()在此列表中的元素上创建Spliterator

List 常用操作方法

java列表上执行的最常见操作是add, remove, set, clear, size 等。

下面一个简单的java列表示例,展示了常用的方法用法:

 public static void main(String args[]) {
        List<String> vowels = new ArrayList<String>();

        //add
        vowels.add("A");
        vowels.add("I");

        //将元素插入到指定位置
        vowels.add(1, "E");
        System.out.println("将元素插入到指定位置:" + vowels);

        List<String> list = new ArrayList<String>();
        list.add("O");
        list.add("U");

        //将集合 list 的所有元素,追加到集合 vowels 中
        vowels.addAll(list);
        System.out.println("集合元素追加到另一个集合:" + vowels);

        //清空集合元素
        list.clear();

        //集合元素大小
        System.out.println("vowels 大小: " + vowels.size());

        //替换指定位置的元素
        vowels.set(2, "E");
        System.out.println("将索引位置为2的元素替换为 E:" + vowels);

        //subList
        vowels.clear();
        vowels.add("E");
        vowels.add("E");
        vowels.add("I");
        vowels.add("O");
        //截取集合 vowels 中索引位置从 0 到 索引位置为 1 的元素
        list = vowels.subList(0, 2);
        System.out.println("vowels: " + vowels + ", vowels.subList(0, 2):" + list);
        //替换集合 vowels 中索引位置为 0 的元素
        vowels.set(0, "A");
        System.out.println("vowels: " + vowels + ", vowels.set(0, A) " + list);
        list.add("U");
        System.out.println("vowels: " + vowels + ", list:" + list);
    }

输出结果:

将元素插入到指定位置 vowels.add(1,E)[A, E, I]
集合元素追加到另一个集合:[A, E, I, O, U]
vowels 大小: 5
将索引位置为2的元素替换为 E:[A, E, E, O, U]
vowels: [E, E, I, O], vowels.subList(0, 2)[E, E]
vowels: [A, E, I, O], vowels.set(0, A) [A, E]
vowels: [A, E, U, I, O], list:[A, E, U]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值