JAVA集合之list系列集合

本文详细介绍了JAVA中的List集合接口及其常见的实现类ArrayList和LinkedList。ArrayList基于数组结构,适合查询,不适合频繁修改;LinkedList采用链表结构,擅长增加和删除,不适合查询。此外,文章还探讨了List集合特有的方法以及如何利用LinkedList实现堆栈和队列功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在了解了java的集合根接口Collection之后,今天来说一下它的的一大子接口list集合以及其常用的子接口。
list集合位于java.util.List包中,相比数组无法确定有效元素这一弊端,List系列集合存在索引值这一概念。因此该集合存储的元素特点是有序的,并且允许有重复元素。
而list集合又有几个常用的实现类:ArrayList、LinkedList、Vector,vector集合不常用了,就主要说一说
ArrayList和LinkedList。

ArrayList:位于java.util.ArrayList包中,该集合采用的是数组结构存储元素,所谓数组结构存储元素,可以用一副简单的图来表示:
在这里插入图片描述
上图是一个存储了5个元素的ArrayList,索引值从0-4,当我们查询某个数据时,程序根据其索引取出相应的值,而当我们对其中某个元素进行增加或者删除时,该元素相邻的元素索引会随之变化,比如对第二个元素进行删除,第三个元素会移动至第二个元素的位置上,并将索引变为1,后续的元素索引也依次进行变化,这也就说明ArrayList适用于查询操作,而不适用修改操作。

由于List集合继承自Collection集合,这里就说一说List集合独有的方法:
collection集合中有add(E e)方法,用于给集合添加指定的元素,而由于List集合存在索引值,提供了一个add(int index,e Element)的方法,用于在指定的索引中添加指定元素:

List list=new ArrayList();
        list.add("AA");
        list.add("BB");
        list.add("CC");
        list.add(1,"DD");
        System.out.println(list);

运行结果:
在这里插入图片描述
类似的,还有addAll(int index,Collection<? extends E> c)方法,在指定的索引位置添加集合中的全部元素:

 List list2=new ArrayList();
        list2.add("EE");
        list2.add("FF");
        list.addAll(1,list2);
        System.out.println(list);

在这里插入图片描述
还可以根据指定的索引提取元素:Object get(int index),获取指定元素的索引位置:
int indexOf(Object obj),以及获取指定元素的最后索引lastIndexOf(Object obj),或是通过索引删除指定元素remove(int index)等等:

 List list=new ArrayList();
        list.add("AA");
        list.add("BB");
        list.add("CC");
        list.add("BB");
        list.add("BB");
        list.add("BB");
        Object obj=list.get(1);

在这里插入图片描述

		System.out.println(list.indexOf("BB"));
        System.out.println(list.lastIndexOf("BB"));
        list.remove(5);
        System.out.println(list);

在这里插入图片描述
调用set(int index, E element)方法可以通过索引修改指定元素的值:

		List list=new ArrayList();
        list.add("AA");
        list.add("BB");
        list.add("CC");
        list.add("BB");
        //修改指定索引的值
        list.set(3,"DD");
        System.out.println(list);

在这里插入图片描述
类似string的subString方法,list集合还提供了subList(int fromIndex, int toIndex)方法,通过指定一个索引区间截取出指定元素形成一个新的集合,注意的是截取范围为左闭右开区间:

		List list2=list.subList(1,3);
        System.out.println(list2);

在这里插入图片描述
接下来说一说LinkedList,不同于ArrayList的数组结构,LinkedList存储数据采用的是链表结构,在上面介绍ArrayList有说到,由于数组结构的原因,对元素增加或是删除效率不高,而采用链表结构的LinkedList集合刚好补上了这个弊端,先简单的看看链表结构:
在这里插入图片描述
比如该图为一个存储了4个元素的LinkedList集合,该集合本身是无序的,元素之间根据链进行连接,即前一个元素的后向索引指向后一个前向索引元素,后一个元素的前向索引指向前一个的后向索引元素,而当我们要插入一个元素或是删除时,只需在插入的位置对前后两个元素重新进行指向,再断掉原来的指向,这样大大提高了效率,而相反的,由于没有索引值的存在,当查询某一个元素时,必须通过一级一级的联系去查找需要的元素,所以该集合不适合查询,而适合增加或是删除元素。

同样地,LinkedList由于其结构不同,也有了新的方法:
添加集合中的第一个元素 public void addFirst(E e)和最后一个元素public void addLast(E e):

  LinkedList list=new LinkedList();

        list.addFirst("AA");
        list.addFirst("BB");
        list.addFirst("CC");
        list.addFirst("DD");
        list.addLast("FF");
         int size=list.size();
        for (int i=0;i<size;i++){
            Object obj2=list.removeFirst();
            System.out.println(obj2);
        }

在这里插入图片描述
类似的还有移除并取得第一个元素removeFirst()、获取第一个元素getFirst()等等,用法类似,就不一一列出来了,而通过LinkedList,我们可以实现堆栈(先进后出)或是队列(先进先出)存储数据,比如我们要完成堆栈,先写一个类封装好方法:
在这里插入图片描述
再调用:
在这里插入图片描述
这样通过addFirst()方法,让最先添加的元素最后出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值