【JAVA】List接口

简介: Array List 的大部分方法是从父类 Collection 和List 继承的,其中add()方法和get()方法分别用于实现元素的存入和取出。下面通过一个案例介绍 Array List 的元素存取。

651d1c39125e4fb48509dc327017e607.jpg


🏆今日学习目标:List接口

😃创作者:颜颜yan_

✨个人主页:颜颜yan_的个人主页

⏰本期期数:第四期

🎉专栏系列:JAVA


一、ArrayList


ArrayList是 List 接口的一个实现类,它是程序中最常见的一种集合。 ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,Array List 会在内存中分配一个更大的数组来存储这些元素,因此可以将 ArrayList 看作一个长度可变的数组。ArrayList 的元素插人过程如图。


7baa54ad2d47473abd925020b1b8ed5c.png


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"并输出。


运行结果如下图:


b0328b23c448480697195d059f51f1b0.png


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


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


二、LinkedList


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


78c288c60d114fa895adb5f5e2327e44.jpg


上图中的实线箭头表示建立新的引用关系,虚线箭头表示删除引用关系。左图为添加元素,元素 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的元素移除。这样就完成了元素的增删操作。


运行结果如图所示:


d6053150a88d42369f016fb5d8b1389a.png


总结


以上就是今天的学习内容啦~

如果有兴趣的话可以订阅专栏,持续更新呢~

咱们下期再见~


d654ccad24f7444193347efdd48461ed.gif

相关文章
|
7天前
|
Java 开发者
奇迹时刻!探索 Java 多线程的奇幻之旅:Thread 类和 Runnable 接口的惊人对决
【8月更文挑战第13天】Java的多线程特性能显著提升程序性能与响应性。本文通过示例代码详细解析了两种核心实现方式:Thread类与Runnable接口。Thread类适用于简单场景,直接定义线程行为;Runnable接口则更适合复杂的项目结构,尤其在需要继承其他类时,能保持代码的清晰与模块化。理解两者差异有助于开发者在实际应用中做出合理选择,构建高效稳定的多线程程序。
28 7
|
5天前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
|
7天前
|
前端开发 JavaScript Java
【前端学java】Java中的接口和枚举概念(8)
【8月更文挑战第9天】Java中的接口和枚举概念(8)
24 4
|
6天前
|
存储 安全 Java
java集合框架复习----(2)List
这篇文章是关于Java集合框架中List集合的详细复习,包括List的特点、常用方法、迭代器的使用,以及ArrayList、Vector和LinkedList三种实现类的比较和泛型在Java中的使用示例。
java集合框架复习----(2)List
|
6天前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
4天前
|
Java 数据库
成功解决:java.sql.SQLSyntaxErrorException: Unknown column ‘origin_name‘ in ‘field list‘
这篇文章分享了作者在使用SpringBoot和Mybatis-plus时遇到的SQLSyntaxErrorException错误,原因是字段映射不正确,并通过修改数据库字段名称或关闭自动驼峰命名转换配置来成功解决了这个问题。
成功解决:java.sql.SQLSyntaxErrorException: Unknown column ‘origin_name‘ in ‘field list‘
|
4天前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
11天前
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
39 8
|
11天前
|
数据采集 Java API
java接口防爬虫
8月更文挑战第9天
|
11天前
|
安全 算法 Java
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)(下)
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)
50 6