当前位置:首页 > 服务端 > [深入了解Java集合框架]-List集合是什么鬼,能吃吗?

[深入了解Java集合框架]-List集合是什么鬼,能吃吗?

2022年11月07日 11:44:08服务端8

List

List实现了Collection,所以他拥有Collection的全部方法

点击查看Collection的方法

List 的存储方式如下
[深入了解Java集合框架]-List集合是什么鬼,能吃吗? _ JavaClub全栈架构师技术笔记
用代码展示如下

//使用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

[深入了解Java集合框架]-List集合是什么鬼,能吃吗? _ JavaClub全栈架构师技术笔记

  • 内部维护了一个数组
  • 每一次增加一个元素或者减少一个元素都要重新创建一个数组
  • 增加删除开销大
  • 查询修改速度快

LinkedList

[深入了解Java集合框架]-List集合是什么鬼,能吃吗? _ JavaClub全栈架构师技术笔记

  • LinkedList是一个双向链表,
  • 添加删除元素时具有比ArrayList更好的性能。
  • 但在元素的查询修改方面要弱于ArrayList。

List的源码解析

除了Collection的方法之外,LIst也有几个特有的方法

一般来说,我们如果使用集合,只需要使用接口就行了,没必要使用实现类的对象进行操作
所以这里只说明List的方法

 

void replaceAll(UnaryOperator<E> 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<? super E> 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<E> listIterator()

返回一个列表迭代器

返回:
返回一个列表迭代器


ListIterator<E> listIterator(int index)

返回一个从指定下标开始的列表迭代器

参数:
index-迭代器的第一个元素的索引
返回:
返回一个从指定下标开始的列表迭代器
抛出:
IndexOutOfBoundsException -如果索引超出范围( index < 0 || index > size() )


List<E> 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 <E> List<E> of(E e1)

返回包含一个元素的不可修改的列表。 见不可修改的列表的详细信息。

参数:
e1 - 所述单个元件,可以有多个,也可以不写返回一个空的
类型参数:
< E > -的List的元素类型
返回:
一个List包含指定元件
抛出:
NullPointerException -如果元素是null


static <E> List<E> copyOf(Collection<? extends E> coll)

拷贝一个Collection集合,顺序为迭代器的顺序

参数:
coll - 一个Collection集合
类型参数:
< E > -的List的元素类型
返回:
一个List包含给定的元素Collection
抛出:
NullPointerException -如果为null,或者如果它包含任何空

作者:Timeless小帅
来源链接:https://blog.csdn.net/qq_18604209/article/details/104282539

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68293.html

标签: List
分享给朋友:

“[深入了解Java集合框架]-List集合是什么鬼,能吃吗?” 的相关文章

List集合实战总结

List集合实战总结

分割List集合 //构造被分隔的集合 List<object> list = new List<object>(); for (int i...

使用stream流将list集合中某一BigDecimal字段求和

public class StreamTest { @Data @Builder public static class Apple { private Integer id;...

List集合操作二:排序

List集合操作二:排序

本文继续讲解List<T>之排序操作,C#范型List类的Sort方法有四种形式,分别是: 1、不带有任何参数的Sort方法----Sort();2、带有比较器参数的Sort方法 ----Sort(IComparer<T>)3、带有比较代理方法参数的Sor...

java List集合基本概念及其基本语法

java List集合基本概念及其基本语法

List集合和数组类似 但比数组要强大且灵活 首先是一个参加 我们要统计一场考试学生的分数 这个数组可以实现 但数组声明时是要固定长度的 比如 我们有52个学生参考 我们数组就声明长度为 52 但我们的学生也是人 可能会请假的啊 那么如果只有四十个...

Java集合:接口List的使用( ArrayList, LinkedList)

Java集合:接口List的使用( ArrayList, LinkedList) 一.List集合的特点: 1.它是一个元素的有序的集合 例如:存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的...

代码实现list集合中的查询

代码实现list集合中的查询

作者:浅唱~幸福 来源链接:https://blog.csdn.net/weixin_39643007/article/details/85714174...

C#简单打印出LIST集合

循环打印集合,打印数组,随手写写,新手可以看看,   结果是不是有一些多余的0,把  int [][] ints =new int[3][];  改为new int[2][]; 运行出错,哈哈.  int...

java集合类list使用

List是有序的集合接口,该接口可以对列表中每个元素的插入位置进行精确地控制,可以根据元素的索引(List中的索引跟数组一样,都是从0开始)访问元素,可以结合Iterator接口进行列表的遍历。 示例:List的增删改查和遍历import java.u...

C# List用法

  C# List<T>用法   所属命名空间:System.Collections.Generic      public class List<T&g...

Unity UGUI —— 无限循环List

Unity UGUI —— 无限循环List

还记得大学毕业刚工作的时候是做flash的开发,那时候看到别人写的各种各样的UI组件就非常佩服,后来自己也慢慢尝试着写,发现其实也就那么回事。UI的开发其实技术的成分相对来说不算多,但是一个好的UI是绝对少不了底层组件的支持的。我个人认为UI组件中相对比较复杂的就是List了,所以,这...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。