【JAVA】List接口

文章详细介绍了Java中的List接口实现类ArrayList和LinkedList。ArrayList基于可变大小的数组,适合元素查询,增删操作效率较低;LinkedList则是双向循环链表,增删高效但查询较慢。文中通过代码示例展示了两种数据结构的常用操作,并对比了它们的性能特点。
摘要由CSDN通过智能技术生成

在这里插入图片描述

🏆今日学习目标:List接口
😃创作者:颜颜yan_
✨个人主页:颜颜yan_的个人主页
⏰本期期数:第四期
🎉专栏系列:JAVA



一、ArrayList

ArrayList是 List 接口的一个实现类,它是程序中最常见的一种集合。 ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,Array List 会在内存中分配一个更大的数组来存储这些元素,因此可以将 ArrayList 看作一个长度可变的数组。ArrayList 的元素插人过程如图。
在这里插入图片描述
Array List 的大部分方法是从父类 Collection 和List 继承的,其中add()方法和get()方法分别用于实现元素的存入和取出。下面通过一个案例介绍 Array List 的元素存取。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        ArrayList list = new ArrayList<>(); //创建集合
        list.add("张三");                     //向集合添加元素
        list.add("李四");
        list.add("王五");
        list.add("马六");
        //获取集合中元素的个数
        System.out.println("集合的长度:"+list.size());
        //取出并打印指定位置的元素
        System.out.println("第三个元素是:"+list.get(2));
        //删除索引为3的元素
        list.remove(3);
        System.out.println("删除索引为3的元素:"+list);
        //将索引为1 的元素替换为李四2
        list.set(1,"李四2");
        System.out.println("替换索引为1的元素为李四2:"+list);
    }
}

在上述代码中,创建了 ArrayList 对象list,代码通过 list对象调用add( Object o)方法添加了4个元素,通过 list对象调用 size()方法获取集合中元素的个数并输出,使用 list 对象调用 get(方法获取索引为 1 的元素并输出,删除 list 对象素引为 了的元素并输出;删除后的list 对象,最后代码替换 list 对象中索引为 1的元素为"李四 2"并输出。

运行结果如下图:
在这里插入图片描述

从图可以看出,素引为 1 的元素是集合中的第2个元素,这就说明集合和数组一样,索引的取值范围是从0开始的,最后一个素引是集合大小减 1。在访问元素时一定要注意索引不可超出此范围,否则程序会抛出素引越界异常 。

由于 ArrayList 的底层是使用一个数组存储元素,在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此 Arraylist 集合不适合做大量的增删操作,而适合元素的查找

二、LinkedList

上面节中讲解的 ArrayList 在查询元素时速度很快,但在增删元素时效率较低。为了克服这种局限性,可以使用 List 接口的另一个实现类-LinkedList。LinkedList内部维护了一个双向循环链表,链表中的每一个元素都使用引用的方式记录它的前一个元素和后一个素,从而可以将所有的元素彼此连按起来。当插人一个新元素时,只需要修改元素之可的引用关系即可;删除一个节点也是如此。正因为 Linkedlist 具有这样的存储结构,所以其增删效率非常高。LinkedList 添加元素和删除元素的过程如图所示:
在这里插入图片描述

上图中的实线箭头表示建立新的引用关系,虚线箭头表示删除引用关系。左图为添加元素,元素 1和元素2在集合中为前后关系,在它们之间新增一个元素时,只需要让元素 1记录它后面的元素为新元素,让元素 2记录它前面的元素为新元素。
右图为删除元素,要想删除元素 1与元素2之间的元素 3,只需要让元素 1 与元素 2变成前后引用关系

针对元素的添加、删除和获取操作,LinkedList 定义了一些特有的方法,如下表

方法声明功能描述
void add(int index,E element)在当前集合的索引index处插入元素element
void addFirst(Object o)将指定元素o插入前集合的开头
void addList(Object o)将指定元素o添加前集合的开将结尾
Object getFirst()返回当前集合的第一个元素
Object getLast()返回当前集合的最后一个元素
Object removeFirst()移除并返回当前集合的第一个元素
Object removeLast()移除并返回当前集合的最后一个元素
boolean offer(Object o)将指定元素o添加到当前集合的结尾
boolean offerFirst(Object o)将指定元素o添加到当前集合的开头
boolean offerLast(Object o)将指定元素o添加到当前集合的结尾
Object peekFirst()获取当前集合的第一个元素
Object peekLast()获取当前集合的最后一个元素
Object pollFirst()移除并返回当前集合的第一个元素
Object pollLast()移除并返回当前集合的最后一个元素
void push(Object o)将指定元素o添加到当前集合的开头

表列出的方法主要用手对集合中的元素进行添加、删除和获取操作。下面通过一个案例来接受这些方法的使用

import java.util.*;
public class Main {
    public static void main(String[] args) {
        LinkedList link = new LinkedList(); //创建集合
        link.add("张三");                     //向集合添加元素
        link.add("李四");
        link.add("王五");
        link.add("马六");
        System.out.println(link.toString()); //获取集合中元素的个数
        link.add(3,"Student"); //向集合中索引为3出插入元素Student
        link.addFirst("First"); //向集合的第一个位置插入First
        System.out.println(link);
        System.out.println(link.getFirst()); //取出集合中的第一个元素
        link.remove(3); //移除集合中索引为3的元素
        link.removeFirst();  //移除集合中的第一个元素
        System.out.println(link);
    }
}

在上述代码中,创建了一个 LinkedList 集合,并且在集合中存人4个元素,通过调用add()和 addFirst()方法分别在集合中索引为3的位置和第一个位置(索引为 0)插人元素,然后通过调用remove()和 removeFirst()方法将集合中索引为 3 和0的元素移除。这样就完成了元素的增删操作。
运行结果如图所示:
在这里插入图片描述


总结

以上就是今天的学习内容啦~
如果有兴趣的话可以订阅专栏,持续更新呢~
咱们下期再见~
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜颜yan_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值