十分钟掌握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.mfbz.cn/a/604470.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧电力,山海鲸引领

随着科技的不断进步和电力行业的快速发展&#xff0c;智能化管理已成为电力行业的重要趋势。在这一背景下&#xff0c;山海鲸智慧电力管理系统凭借其卓越的性能和创新的功能&#xff0c;为电力行业带来了革命性的改变。 山海鲸智慧电力管理系统是一套集数据采集、分析、展示于…

视频号小店常见问题合集,准备做视频号小店的,赶紧收藏起来

大家好&#xff0c;我是电商花花。 现在视频号小店在电商行业中越来越受欢迎&#xff0c;视频号背后依靠者微信和腾讯强大的流量&#xff0c;拥有着超强的流量和市场&#xff0c;在今年的电商市场中有引起了一个热门话题&#xff0c;作为一个有流量有市场的新兴创业自然是吸引…

使用python将`.mat`文件转换成`.xlsx`格式的Excel文件!!

要将.mat文件转换成.xlsx格式的Excel文件 第一步&#xff1a;导入必要的库第二步&#xff1a;定义函数来转换.mat文件第三步&#xff1a;调用函数注意事项 要将.mat文件转换成.xlsx格式的Excel文件&#xff0c;并保持文件名一致&#xff0c;你可以使用scipy.io.loadmat来读取.m…

模块整理!YOLOv9中的“Silence”、“RepNCSPELAN4”、“ADown”、“CBLinear”创新模块汇总!

专栏地址&#xff1a;目前售价售价69.9&#xff0c;改进点50 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 本文对YOLOv9中出现的新模块进行整理 1. Silence模块 模块介绍&#xff1a;Silence是…

DDR5和LPDDR4/5 命令解析

关键名称介绍 DDR5 SDRAM和LPDDR4/5都采用了高级的命令集来支持更高效的内存管理和操作,其中“Multi-purpose command (MPC)”、“Mode Register Read (MRR)”、“Mode Register Write (MRW)”,以及“Write Pattern Command”是几种关键的命令类型,它们在内存初始化、配置和…

笔记2:cifar10数据集获取及pytorch批量处理

&#xff08;1&#xff09;cifar10数据集预处理 CIFAR-10是一个广泛使用的图像数据集&#xff0c;它由10个类别的共60000张32x32彩色图像组成&#xff0c;每个类别有6000张图像。 CIFAR-10官网 以下为CIFAR-10数据集data_batch_*表示训练集数据&#xff0c;test_batch表示测试…

股票退市的最新要求!

五一假期一过&#xff0c;多家上市公司都进入退市名单&#xff0c;不知道有没有您的股票&#xff1f;很多朋友直呼现在炒股越来越难&#xff0c;一步小心就买到了退市个股&#xff0c;加上新改革&#xff0c;我们一起来结合退市政策来了解下怎么挑选个股&#xff1f; 2024年最新…

论文查重率高,有什么办法降重吗?

现在大部分学校已经进入到论文查重降重的阶段了。如果查重率居高不下&#xff0c;延毕的威胁可能就在眼前。对于即将告别校园的学子们&#xff0c;这无疑是个噩梦。四年磨一剑&#xff0c;谁也不想在最后关头功亏一篑。 查重率过高&#xff0c;无非以下两种原因。要么是作为“…

《手把手教你怎么上手做一个小程序》

准备工作&#xff1a; 硬件准备&#xff1a; 装有微信的手机一台。 账号注册&#xff1a; 进入https://mp.weixin.qq.com/cgi-bin/registermidpage?actionindex&langzh_CN&token注册一个微信小程序账号。 然后输入邮箱注册账号。一个邮箱只能注册一个微信公众平台…

在WPS表格(Excel)中,每10行增加一个特定的值

注&#xff1a;如下为WPS表格操作演示 例如1&#xff0d;15的数值是1&#xff0c;16-30就变为2&#xff0c;31-45就变为3&#xff0c;类推&#xff01; 1、在B1单元格输入一个起始值&#xff0c;B2单元格输入公式IF(MOD(ROW(),15)0,B11,B1) 然后鼠标放到B2单元格右下角小点处&…

案例分享:BACnet转Modbus提升暖通系统互操作性

现代智能建筑中系统的集成与互操作性是决定其智能化程度的关键因素。随着技术的发展&#xff0c;不同标准下的设备共存成为常态&#xff0c;而BACnet与Modbus作为楼宇自动化领域广泛采用的通讯协议&#xff0c;它们之间的无缝对接显得尤为重要。本文将通过一个实际案例&#xf…

一次有关 DNS 解析导致 APP 慢的问题探究

一、业务背景 HTTTPDNS AWS Router53 APP 使用 HTTPDNS&#xff0c; 为解决 DNS 解析生效慢&#xff0c; DNS 劫持等问题。 我们 IOS 和安卓都是使用了 HTTPDNS。 域名托管在 AWS Router53。 域名有多个解析(基于延迟)&#xff0c;为了解决就近接入。 示例配置 ai.baidu.c…

考情分析 | 2025年西北工业大学计算机考研考情分析!

西北工业简称西工大&#xff08;英文缩写NPU&#xff09;&#xff0c;大学坐落于古都西安&#xff0c;是我国唯一一所以同时发展航空、航天、航海工程教育和科学研究为特色&#xff0c;以工理为主&#xff0c;管、文、经、法协调发展的研究型、多科性和开放式的科学技术大学。十…

《Python编程从入门到实践》day22

# 昨日知识点回顾 方法重构、驾驶飞船左右移动、全屏显示 飞船不移动解决&#xff0c;问题出在移动变量x更新 # Ship.pysnipdef update(self):"""根据移动标志调整飞船的位置"""# 更新飞船而不是rect对象的x值# 如果飞船右移的标志和飞船外接…

嵌入式引脚工作模式

一.引脚工作模式的基本概念 引脚的工作模式通常包括输入模式、输出模式和双向模式&#xff1a; 输入模式&#xff1a;引脚设置为输入模式时&#xff0c;可以接收外部信号或触发器的信号。这种模式通常用于读取传感器数据、接收外部设备的信号等。 输出模式&#xff1a;引脚设…

链表的阶乘

int FactorialSum(List L) {int res 0; // 结果初始化struct Node* x L; // 从链表的头节点开始// 遍历链表中的每一个节点while (x ! NULL) {int data x->Data; // 当前节点的值int y 1; // 用于计算当前节点值的阶乘// 计算当前节点值的阶乘for (int j 1; j < dat…

ROS 2边学边练(44)-- 从头开始构建一个视觉机器人模型

前言 从此篇开始我们就开始接触URDF(Unified Robot Description Format&#xff0c;统一机器人描述格式)&#xff0c;并利用其语法格式搭建我们自己的机器人模型。 动动手 开始之前我们需要确认是否安装joint_state_publisher功能包&#xff0c;如果有安装过二进制版本的urdf_…

单位档案寄存该怎么处理才好

处理单位档案寄存的方式可以根据实际情况来确定&#xff0c;以下是一些常见的处理方式&#xff1a; 1. 数字化存档&#xff1a;将单位档案进行数字化处理&#xff0c;通过扫描或拍照将文件转化为电子格式。这样可以方便查找和管理&#xff0c;减少纸质文件的存储量&#xff0c;…

iOS ------ 内存五大分区

1&#xff0c;内存的概念&#xff1a; 虚拟内存&#xff08;Virtual Memory&#xff09;&#xff1a;虚拟内存是操作系统提供的一种机制&#xff0c;它使得应用程序能够访问超出物理内存限制的内存空间。虚拟内存将应用程序的内存地址空间分割成固定大小的页面&#xff08;Pag…

elementui+vue通过下拉框多选字段进行搜索模糊匹配

从字典中选择的值为["01","03"],在最开始的时候进行的处理是类似于表单提交的时候将json对象转换成了String类型 nature:["01","03"] this.queryParams.nature JSON.stringify(this.queryParams.nature); mapper层 <if test&quo…
最新文章