十分钟掌握Java集合之List接口

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  Java是一款面向对象的编程语言,也被称为“平台无关性”的语言。Java中的集合类是一种非常重要的数据结构,其中List接口类是最常用的一种。本篇文章将深入探讨Java中的List接口类,以帮助开发人员更好的理解和应用于实际开发中。

摘要

  本文将介绍Java中的List接口类,包括其定义、特点、应用场景、优缺点分析等内容。同时,还会通过源代码解析和测试用例,帮助读者更深入地了解List接口类的实现和使用方法。

List接口类

简介

  List是Java中的一个接口类,它扩展了Collection接口,并且可以按照索引位置存储和访问元素。List中的元素是按照插入顺序保存的,并且允许有重复元素存在。与数组不同的是,List的容量可以动态增长。

  List接口提供了一系列方法来对列表中的元素进行操作,包括添加、删除、获取、修改等。常用的List实现类有ArrayListLinkedList,它们在实现方式和性能方面具有不同的特点。

源代码解析

List接口类定义

public interface List<E> extends Collection<E> {int size();boolean isEmpty();boolean contains(Object o);Iterator<E> iterator();Object[] toArray();<T> T[] toArray(T[] a);boolean add(E e);boolean remove(Object o);boolean containsAll(Collection<?> c);boolean addAll(Collection<? extends E> c);boolean addAll(int index, Collection<? extends E> c);boolean removeAll(Collection<?> c);boolean retainAll(Collection<?> c);void clear();boolean equals(Object o);int hashCode();E get(int index);E set(int index, E element);void add(int index, E element);E remove(int index);int indexOf(Object o);int lastIndexOf(Object o);ListIterator<E> listIterator();ListIterator<E> listIterator(int index);List<E> subList(int fromIndex, int toIndex);
}

  上述代码为List接口类的定义,其中定义了大量的方法用于对列表中的元素进行操作。List接口类继承自Collection接口,并且扩展了一些额外的方法,如get()、set()、add()等。

  源码部分截图如下:

在这里插入图片描述

ArrayList实现类

  ArrayList是List接口的一个实现类,它是基于数组实现的。在创建ArrayList对象时,需要指定初始容量,如果不指定,则默认为10。当向ArrayList中添加元素时,如果当前容量不够,则会自动进行扩容。

public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable {private static final long serialVersionUID = 8683452581122892189L;// Default initial capacity.private static final int DEFAULT_CAPACITY = 10;// Shared empty array instance used for empty instances.private static final Object[] EMPTY_ELEMENTDATA = {};// The array buffer into which the elements of the ArrayList are stored.transient Object[] elementData;// The size of the ArrayList (the number of elements it contains).private int size;// ...
}

  上述代码为ArrayList的部分实现,可以看到,ArrayList内部是通过一个Object数组来存储元素的,其中elementData表示存储元素的数组,size表示当前列表中元素的数量。

  源码部分截图如下:

在这里插入图片描述

LinkedList实现类

  LinkedList是List接口的另一个实现类,它是基于链表实现的。LinkedList内部维护了headtail两个指针,分别指向链表头和尾。

public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable {transient int size = 0;transient Node<E> first;transient Node<E> last;// ...private static class Node<E> {E item;Node<E> next;Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}}
}

  上述代码为LinkedList的部分实现,可以看到,LinkedList内部是通过一个Node类来表示链表节点,其中prev表示前一个节点,next表示后一个节点。

  源码部分截图如下:

在这里插入图片描述

应用场景案例

  List接口类在实际开发中有广泛的应用场景,下面列举几个常见的应用案例:

数据存储

  List接口类是一个常见的数据结构,可以用于存储各种类型的数据,如整数、字符串、对象等。在实际开发中,我们经常需要将一些数据进行分组、排序或者过滤,这时List就成为了一个非常方便的数据结构。

集合运算

  List接口类支持一系列的集合运算,如交集、并集、差集等。这些运算可以帮助程序员快速地处理一些复杂的逻辑,如合并两个列表、查找两个列表中共有的元素等。

缓存实现

  List接口类可以作为缓存的数据结构,用于存储一些常用的数据。在程序中访问这些数据时,可以先从List中查找,如果没有命中,则再从数据库或者其他缓存中取出数据。这样可以提高程序的访问速度和效率。

优缺点分析

List接口类作为一个常见的数据结构,具有以下优点和缺点:

优点

  1. 支持按照索引位置存储和访问元素。

  2. 允许有重复元素存在。

  3. 内部实现可以选择数组或者链表,具有灵活性。

  4. 支持一系列的集合运算,方便程序员进行数据处理和操作。

缺点

  1. 添加和删除元素时,可能需要执行多次内存分配和拷贝操作,性能较差。

  2. 基于数组实现的List,在进行扩容时需要重新分配内存和拷贝数组,比较耗时。

类代码方法介绍

List接口类提供了一系列的方法用于对列表中的元素进行操作,下面列举一些常用的方法:

add(E e)

boolean add(E e);

该方法用于向列表末尾添加一个元素。

remove(Object o)

boolean remove(Object o);

该方法用于从列表中删除一个元素。

get(int index)

E get(int index);

该方法用于获取列表中指定索引位置的元素。

set(int index, E element)

E set(int index, E element);

该方法用于替换列表中指定索引位置的元素。

size()

int size();

该方法用于返回列表中元素的数量。

测试用例

下面给出一个简单的测试用例,以测试List接口类的基本功能:

测试代码

代码如下:

package com.example.javase.collection;import java.util.ArrayList;
import java.util.List;/*** @Author ms* @Date 2023-10-24 18:47*/
public class ListTest {public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("A");list.add("B");list.add("C");System.out.println(list);list.remove("B");System.out.println(list);System.out.println(list.get(1));list.set(0, "D");System.out.println(list);System.out.println(list.size());}
}

  上述测试用例使用了ArrayList实现类,演示了一些基本操作,如添加元素、删除元素、获取元素、替换元素和获取列表长度等。

测试结果

根据如上测试用例,如下测试用例结果请参考:

在这里插入图片描述

测试代码分析

  在如上测试用例中,首先创建了一个ArrayList对象list,并向其中添加了三个元素"A"、“B”、“C”。接着,通过list.remove("B")方法,从列表中删除了元素"B"。

  然后,通过list.get(1)方法,获取了列表中索引为1的元素,即"C"。接着,通过list.set(0, "D")方法,将列表中索引为0的元素"A"替换为"D"。

  最后,通过list.size()方法,获取了列表的长度,即2。

全文小结

  本文介绍了Java中的List接口类,包括其定义、特点、应用场景、优缺点分析等内容。同时,还通过源代码解析和测试用例,帮助读者更深入地了解List接口类的实现和使用方法。

总结

  本文介绍了Java中的List接口类,包括其定义、特点、应用场景、优缺点分析等内容。同时,通过源代码解析和测试用例,帮助读者更深入地了解List接口类的实现和使用方法。List作为一种常见的数据结构,在实际开发中应用广泛,可以用于数据存储、集合运算、缓存实现等场景。尽管List具有许多优点,如支持按照索引存储和访问元素、允许有重复元素存在等,但也存在一些缺点,如添加和删除元素时性能较差、基于数组实现的List在进行扩容时需要重新分配内存和拷贝数组等。此外,本文还列举了一些List接口类的常用方法,如add、remove、get、set等,以及针对ArrayList实现类的测试用例,帮助读者更好地掌握List接口类的使用方法。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/322077.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

风格迁移——CAP-VSTNet训练自己数据集并推理测试(详细图文教程)

目录 一、CAP-VSTNet二、源码包准备三、环境准备四、数据集准备4.1 源码包中数据集4.2 动漫风格数据集4.3 MS_COCO数据集 五、训练5.1 训练配置参数修改5.2 开始训练5.2.1 训练真实感模型5.2.2 训练艺术感感模型 5.3 训练过程5.4 模型输出保存 六、测试6.1 单帧图片测试6.1.1 测…

Leetcode—163. 缺失的区间【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—163. 缺失的区间 实现代码 class Solution { public:vector<vector<int>> findMissingRanges(vector<int>& nums, int lower, int upper) {int n nums.size();vector<vector<int>> an…

数字工厂管理系统如何实现生产过程透明化

随着科技的飞速发展&#xff0c;数字化转型已成为制造业不可逆转的趋势。数字工厂管理系统作为实现生产自动化、智能化的重要工具&#xff0c;其在提升生产效率、降低运营成本、优化资源配置等方面的作用日益凸显。其中&#xff0c;实现生产过程的透明化是数字工厂管理系统的重…

HTML Audio标签src使用base64字符

源码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Audio src base64</title> </head> <body><audio controls><source src"data:audio/mp3;base64,//OIxAAAAAAAAAA…

嵌入式linux学习第三天汇编语言点灯

嵌入式linux学习第三天汇编语言点灯 今天学习如何在linux板子上点灯。 I.MX6U GPIO 详解 我们发现I.MX6U GPIO是分为两类的&#xff0c;&#xff1a;SNVS 域的和通用的。在讨论i.MX6U或类似的复杂微处理器时&#xff0c;了解其GPIO&#xff08;通用输入输出&#xff09;引脚…

IoTDB 入门教程 基础篇③——基于Linux系统快速安装启动和上手

文章目录 一、前文二、下载三、解压四、上传五、启动六、执行七、停止八、参考 一、前文 IoTDB入门教程——导读 二、下载 下载二进制可运行程序&#xff1a;https://dlcdn.apache.org/iotdb/1.3.1/apache-iotdb-1.3.1-all-bin.zip 历史版本下载&#xff1a;https://archive.…

【软考高项】三十六、资源管理6个过程

一、规划资源管理 1、定义、作用 定义&#xff1a;定义如何估算、获取、管理和利用团队以及实物资源的过程作用&#xff1a;根据项目类型和复杂程度确定适用于项目资源的管理方法和管理程度 2、输入 项目管理计划 质量管理计划、范围基准项目章程 项目文件 需求文件…

ComStar系统架构介绍

中国外汇交易中心为适应市场需要&#xff0c;开发推出了ComStar外汇资金交易管理系统&#xff0c;该系统能够快速响应市场变化及监管机构的新要求&#xff0c;通过与交易中心银行间市场的外汇交易系统无缝连接&#xff0c;为市场成员提供了更为高效、便利、安全稳定的外汇资金业…

项目管理-项目绩效域2/2

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 八大绩效域包括&#xff1a;“团干部 策划开公交” 团队、干系人、不确定性、测试、规划、开发方法与生命周期、项目工作、交付。 上节…

Unity 性能优化之光照优化(七)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、测试目的一、实时光源是什么&#xff1f;二、开始测试1.场景中只有一个光照的数值情况2.添加4个点光源后4.结果 总结 前言 实时光源数量越多&#x…

学习软考----数据库系统工程师25

关系规范化 1NF&#xff08;第一范式&#xff09; 2NF&#xff08;第二范式&#xff09; 3NF&#xff08;第三范式&#xff09; BCNF&#xff08;巴克斯范式&#xff09; 4NF&#xff08;第四范式&#xff09; 总结

【vue+el-upload】当action=“#“,代表不使用默认上传,使用自定义上传,http-request获取文件流

el-upload有多种上传行为&#xff1a; 1、立即上传&#xff1a; 当 action 属性被赋予一个有效的 URL 时&#xff0c;一旦用户选择了文件&#xff0c;el-upload 组件会立即自动将文件上传到指定的服务器地址。 2、不立即上传&#xff08;自定义触发&#xff09;&#xff1a; 如…

nlp课设 - 基于BERT 的情感分类

基于BERT 的情感分类 主要论文&#xff1a; BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding&#xff08;双向Transformer 的预训练&#xff09; 核心技术&#xff1a; Embedding 、Attention --> Transformer 任务简介、拟解决问题…

音源分离|数据集|MUSDB18-HQ

一、说明 MUSDB18-HQ是MUSDB18数据集的未压缩版本。它由总共150首不同风格的完整歌曲组成&#xff0c;包括立体声混音和原始源&#xff0c;分为训练子集和测试子集。 其目的是作为设计和评估源分离算法的参考数据库。这种信号处理方法的目的是从一组混合物中估计一个或多个源&a…

2023年谷歌拒了228万应用,禁了33.3万账号,开发者们应如何应对2024的挑战?

谷歌在上周一公布了去年如何应对恶意应用和恶意行为。 报告指出&#xff0c;去年谷歌在Google Play平台上&#xff0c;通过不断升级安全系统、更新政策规定、运用先进的机器学习技术&#xff0c;以及严格把关应用审核流程&#xff0c;成功阻止了高达228万个不合规的应用程序上架…

2024牛客五一集训派对day2 Groundhog Looking Dowdy 个人解题思路

前言&#xff1a; 被实验室教练要求要打的这次五一牛客的训练赛&#xff0c;这些区域赛难度的题对于大一的我来说难度实在是太高了&#xff0c;我和我的队友只写了一些非常简单的签到题&#xff0c;其他题目都没怎么看&#xff08;我们太弱了&#xff09;&#xff0c;但我可以分…

使用Gradio搭建聊天UI实现质谱AI智能问答

使用Gradio搭建聊天UI实现质谱AI智能问答 一、调用智谱 AI API二、使用Gradio搭建聊天UI三、将流式处理添加到交互式聊天机器人 一、调用智谱 AI API 1、获取api_key 智谱AI开放平台网址&#xff1a; https://open.bigmodel.cn/overview 2、安装库pip install zhipuai 3、执…

[笔试训练](十六)

目录 046:字符串替换 047:神奇数 048:DNA序列 046:字符串替换 字符串替换_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 简单模拟题~ class StringFormat { public:string formatString(string str, int n, vector<char> arg, int m) {strin…

API开发的必备神器:华为云CodeArts API实用体验入门篇

今天我想给大家推荐一款API全生命周期研发与管理工具&#xff1a;华为云CodeArts API。 作为互联网软件的开发者&#xff0c;在软件研发的过程中&#xff0c;API的开发、调试、测试是必不可少的。之前我使用的是Postman这类工具来辅助开发&#xff0c; Postman在接口调试方面确…

WPF TextBox文本框 输入提示

思路 Grid标签里面创建Label和TextBox&#xff0c;这是一个整体。 TextBox 为空显示 Label OR TextBox 不为空隐藏 Label 。 注意 两个标签的前后顺序。 TextBox文本的背景颜色设置为透明&#xff0c;不然会无法看到 Label 内容。 ElementNametxtStoreName&#xff1a;指定…