当前位置:首页 > 服务端 > JAVA集合之list系列集合

JAVA集合之list系列集合

2022年11月09日 21:27:18服务端20

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

ArrayList:位于java.util.ArrayList包中,该集合采用的是数组结构存储元素,所谓数组结构存储元素,可以用一副简单的图来表示:
JAVA集合之list系列集合 _ JavaClub全栈架构师技术笔记
上图是一个存储了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);

运行结果:
JAVA集合之list系列集合 _ JavaClub全栈架构师技术笔记
类似的,还有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);

JAVA集合之list系列集合 _ JavaClub全栈架构师技术笔记
还可以根据指定的索引提取元素: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);

JAVA集合之list系列集合 _ JavaClub全栈架构师技术笔记

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

JAVA集合之list系列集合 _ JavaClub全栈架构师技术笔记
调用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);

JAVA集合之list系列集合 _ JavaClub全栈架构师技术笔记
类似string的subString方法,list集合还提供了subList(int fromIndex, int toIndex)方法,通过指定一个索引区间截取出指定元素形成一个新的集合,注意的是截取范围为左闭右开区间:

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

JAVA集合之list系列集合 _ JavaClub全栈架构师技术笔记
接下来说一说LinkedList,不同于ArrayList的数组结构,LinkedList存储数据采用的是链表结构,在上面介绍ArrayList有说到,由于数组结构的原因,对元素增加或是删除效率不高,而采用链表结构的LinkedList集合刚好补上了这个弊端,先简单的看看链表结构:
JAVA集合之list系列集合 _ JavaClub全栈架构师技术笔记
比如该图为一个存储了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);
        }

JAVA集合之list系列集合 _ JavaClub全栈架构师技术笔记
类似的还有移除并取得第一个元素removeFirst()、获取第一个元素getFirst()等等,用法类似,就不一一列出来了,而通过LinkedList,我们可以实现堆栈(先进后出)或是队列(先进先出)存储数据,比如我们要完成堆栈,先写一个类封装好方法:
JAVA集合之list系列集合 _ JavaClub全栈架构师技术笔记
再调用:
JAVA集合之list系列集合 _ JavaClub全栈架构师技术笔记
这样通过addFirst()方法,让最先添加的元素最后出来。

作者:Fjtd_2019
来源链接:https://blog.csdn.net/Fjtd_2019/article/details/105660103

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

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


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

分享给朋友: