java集合进阶篇-《List集合》

dc36953054264521b68a923efe53222c.png个人主页→VON

cebd6b4f65b24cda84e774c03af300c0.png收录专栏→java从入门到起飞

目录

​编辑

一、前言

二、List集合简要概述

三、List集合主要函数的应用

四、List集合的遍历

五、思考


一、前言

List集合与Collection集合的相同之处还是挺多的,不过有些小细节又不太一样,其中有一个挺有意思的地方,就是删除元素的那个地方,希望能够给大家讲明白。最近更新速度可能会特别的慢,希望大家多多理解。

二、List集合简要概述

在Java中,List 是一种常用的集合类型,它允许存储任意类型的对象,并且提供了按照插入顺序来维护元素的有序集合。List 接口是 Java 集合框架的一部分,定义了可以用于任何列表实现的一组方法。List 的主要实现包括 ArrayListLinkedListVector(以及它的子类 Stack),每种实现都有其特定的性能特点和使用场景。

  1. ArrayList:实现了可变大小的数组,它允许在列表中间进行快速随机访问,但是插入和删除操作(特别是在列表的中间位置)会相对较慢,因为这需要重新分配数组的大小并移动元素。

  2. LinkedList:使用双向链表来存储元素,这意味着它可以在 O(1) 时间复杂度内插入或删除元素,但是访问元素的速度比 ArrayList 慢,因为它需要从头开始遍历直到找到目标节点。

  3. Vector:类似于 ArrayList,但是 Vector 中的方法是同步的(synchronized),这意味着它是线程安全的,可以用于多线程环境。然而,由于同步带来的性能开销,Vector 在非同步环境中通常不如 ArrayList 性能好。

除了这些基本的实现之外,还有一些常见的视图类,比如 Collections.unmodifiableList() 返回一个不可修改的列表,这样可以创建只读的数据结构。

List 接口提供了一系列方法来操作列表中的元素,例如添加(add())、删除(remove())、查找(get())、替换(set())等。此外,还有 size() 方法来获取列表中元素的数量,以及 isEmpty() 方法来检查列表是否为空等等。

使用 List 集合时,可以根据具体的应用需求选择最适合的实现方式。例如,如果你需要频繁地插入和删除元素,那么 LinkedList 可能是最好的选择;如果你需要频繁地访问列表中的元素并且不太关心插入和删除的效率,那么 ArrayList 将是一个更好的选择。

三、List集合主要函数的应用

package ArrayDemo.ListDemo;

import java.util.ArrayList;
import java.util.List;

public class A01_ListDemo01 {
    public static void main(String[] args) {
        // 1.创建集合并添加元素
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        // 2.打印集合
        System.out.println(list);// [a, b, c, d, e]

        // 3.在集合中指定位置添加元素
        // void add(int index,E element)
        // 原来索引上的元素会依次后移
        list.add(2,"aaa");
        System.out.println(list);// [a, b, aaa, c, d, e]

        // 4.删除指定索引的元素,返回被删除的元素
        // E remove(int index)
        list.remove(1);
        System.out.println(list);// [a, aaa, c, d, e]

        // 5.修改指定位置的元素,返回被修改的元素
        // E set(int index, E element)
        list.set(1,"bbb");
        System.out.println(list);// [a, bbb, c, d, e]

        // 6.返回指定索引处的元素
        // E get(int index)
        System.out.println(list.get(2));// c

    }
}

list集合中主要用到的函数就这么几个,需要注意的地方我都已经添加了注释,希望大家能够更好的去理解。 

四、List集合的遍历

package ArrayDemo.ListDemo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class A03_ListDemo03 {
    public static void main(String[] args) {
        /*
            List集合的五种遍历方式:
            1.迭代器
            2.列表迭代器
            3.增强for
            4.Lambda表达式
            5.普通for循环
         */

        // 1.创建集合并添加元素
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");
        list.add("f");

        // 2.迭代器
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
        System.out.println("---------------------------------");

        // 3.列表迭代器
        // 获取一个列表迭代器对象,里面的指针也是默认从0开始的
        // 额外添加了一个方法:在遍历的过程中,可以添加元素
        ListIterator<String> it1 = list.listIterator();
        while(it1.hasNext()){
            String str = it1.next();
            if("b".equals(str)){
                it1.add("aaa");
            }
        }
        System.out.println(list);
        System.out.println("---------------------------------");
        // 4.增强for
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("---------------------------------");

        // 5.Lambda表达式
        // forEash方法的底层其实就是一个循环遍历,依次得到集合中的每一个元素
        // 并把集合中的元素传递给accept方法
        list.forEach(s-> System.out.println(s));
        System.out.println("---------------------------------");

        // 6.普通for循环
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("---------------------------------");
    }
}

说句不好听的,我个人感觉熟练运用一种就可以了,从我的角度出发,我感觉增强for循环挺好用的,毕竟for循环用的比较多,所以对for情有独钟。 

五、思考

不知道大家有没有思考过这个问题,如果集合中全都是数字,应该怎样去删除这个元素呢?

应该都能看到remove的源码中传入的参数是index,所以会优先根据下标进行删除。

解决方法:

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

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

相关文章

嵌入式学习-IO进程-Day04

嵌入式学习-IO进程-Day04 进程的函数接口 fork和Vfork 回收进程资源 wait waitpid 退出进程 获取进程号&#xff08;getpid&#xff0c;getppid&#xff09; 守护进程 守护进程的特点 创建步骤 exec函数族 线程 概念 线程和进程的区别 线程资源 线程函数接口 创建线程&#xff…

ASO优化手机游戏的秘密功能

在本文中&#xff0c;我们将尝试弄清楚手机游戏的 ASO 优化是否有任何特定功能。移动游戏在移动应用世界中占有特殊的地位&#xff0c;因为它们是最赚钱的细分市场。然而&#xff0c;今天&#xff0c;我们将关注的不是货币化&#xff0c;而是基础知识—文本和视觉优化、它们在游…

AI自动生成PPT哪个软件好?智能生成PPT不再熬夜做课件

大概这世上&#xff0c;都是职场牛马对“PPT”这三个字母的头痛反应最大吧&#xff01; 是的&#xff0c;就连各个年级段的老师也是很头痛——愁着怎样能在排版整齐的情况下&#xff0c;将必考知识点都呈现在PPT每一张幻灯片页面里...... 近期打听到用人工智能生成ppt课件&am…

2024全国大数据与计算智能挑战赛火热报名中!

一年一度的 全国大数据与计算智能挑战赛震撼来袭&#xff01; 报名速通&#xff1a; https://www.datafountain.cn/special/BDSSF2024 大数据与决策&#xff08;国家级&#xff09;实验室连续三年组织发起全国大数据与计算智能挑战赛&#xff0c;旨在深入挖掘大数据应用实践中亟…

基于模型预测控制(MPC)储能控制策略-多目标哈里斯鹰(MOHHO)算法的储能容量配置方法

目录 一、主要内容&#xff1a; 二、运行效果&#xff1a; 三、模型预测控制介绍&#xff1a; 四、多目标哈里斯鹰算法&#xff1a; 五、代码数据下载&#xff1a; 一、主要内容&#xff1a; 本研究旨在提出一种双层控制模型&#xff0c;结合模型预测控制&#xff08;MPC…

2024年四非边缘鼠鼠计算机保研回忆(记录版 碎碎念)

Hi&#xff0c;大家好&#xff0c;我是半亩花海。写下这篇博客时已然是金秋十月&#xff0c;心中的石头终于落地&#xff0c;恍惚间百感交集。对于保研这条路&#xff0c;我处于摸着石头过河、冲击、随缘的这些状态。计算机保研向来比其他专业难&#xff0c;今年形势更是艰难。…

开发一个微信小程序要多少钱?

在当今数字化时代&#xff0c;微信小程序成为众多企业和个人拓展业务、提供服务的热门选择。那么&#xff0c;开发一个微信小程序究竟需要多少钱呢&#xff1f; 开发成本主要取决于多个因素。首先是功能需求的复杂程度。如果只是一个简单的信息展示小程序&#xff0c;功能仅限…

Pytest中fixture的scope详解

pytest作为Python技术栈下最主流的测试框架&#xff0c;功能极为强大和灵活。其中Fixture夹具是它的核心。而且pytest中对Fixture的作用范围也做了不同区分&#xff0c;能为我们利用fixture带来很好地灵活性。 下面我们就来了解下这里不同scope的作用 fixture的scope定义 首…

一图解千言,了解常见的流程图类型及其作用

在企业管理、软件研发过程中&#xff0c;经常会需要进行各种业务流程梳理&#xff0c;而流程图就是梳理业务时必要的手段&#xff0c;同时也是梳理的产出。但在不同的情况下适用的流程图又不尽相同。 本文我们就一起来总结一下8 种最常见的流程图类型 数据流程图 数据流程图&…

WordPress任推帮网盘拉新数据统计插件

任推邦是国内一线的APP推广项目分发和流量变现平台&#xff0c;隶属聚名科技集团&#xff08;国家级高新技术企业、AAA重合同守信用企业&#xff0c;安徽百强企业&#xff09;,任推邦目前是阿里、字节、百度、迅雷、美团等品牌一级用户增长服务商&#xff0c;已入驻各类自媒体达…

基于Java的茶叶商城设计与实现(源码+定制+开发)茶叶电商系统开发、茶叶电商平台开发、茶叶在线销售平台设计与开发

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

利士策分享,新知速学,稳赚之道

利士策分享&#xff0c;新知速学&#xff0c;稳赚之道 在当今这个日新月异的时代&#xff0c;新知识、新技术如雨后春笋般层出不穷。 对于渴望在商海中稳操胜券的投资者而言&#xff0c;快速掌握新领域知识&#xff0c;并以此为基石赚取稳定收益&#xff0c;无疑是一项至关重…

从Apple Intelligence到远程机器人手术:更快、更安全的网络成企业业务关键

过去&#xff0c;企业的业务模式和网络架构相对简单&#xff0c;数据传输量不大&#xff0c;远程访问需求也不多。企业对网络的要求主要集中在确保基本的连通性和可用性。如今&#xff0c;企业通过将产品与各项高新技术深度融合&#xff0c;赋予传统产品活力和竞争力。以苹果公…

【AAOS】Android Automotive 14模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r20 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch sdk_car_x86_64-trunk_staging-eng make -j8 运行效果 emualtor Home All apps …

[LeetCode] 415.字符串相加

给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库&#xff08;比如 BigInteger&#xff09;&#xff0c; 也不能直接将输入的字符串转换为整数形式。 示例 1&#xff1a; 输入&#xff…

Python编程探索:从基础语法到循环结构实践(下)

文章目录 前言&#x1f377;四、 字符串拼接&#xff1a;连接多个字符串&#x1f378;4.1 使用 操作符进行字符串拼接&#x1f378;4.2 使用 join() 方法进行字符串拼接&#x1f378;4.3 使用 format() 方法进行格式化拼接&#x1f378;4.4 使用 f-string&#xff08;格式化字…

DS几大常见排序讲解和实现(中)(14)

文章目录 前言一、希尔排序( 缩小增量排序 )基本思想实现思路时间空间复杂度分析总结 二、选择排序基本思想实现思路时间空间复杂度分析总结 三、堆排序四、冒泡排序基本思想实现思路总结 五、归并排序基本思想实现思路总结 六、计数排序基本思想总结 总结 前言 承上启下&#…

CPP-TCP80优化

CPP-TCP80优化 调整场景&#xff1a;(无法弹出认证界面或弹出慢&#xff09; 其中判断是否需要调整的方法如下&#xff1a;高峰期每隔20s show一次如下命令&#xff0c;查看Drop列数值是否有增加。 说明&#xff1a; web认证情况下&#xff0c;如果同时进行web重定向用户较多&…

【服务器部署】Docker部署小程序

一、下载Docker 安装之前&#xff0c;一定查看是否安装docker&#xff0c;如果有&#xff0c;卸载老版本 我是虚拟机装的Centos7&#xff0c;linux 3.10 内核&#xff0c;docker官方说至少3.8以上&#xff0c;建议3.10以上&#xff08;ubuntu下要linux内核3.8以上&#xff0c…

TPAMI 2024 | TokenCut:使用自监督 Transformer 和正则化剪切对图像和视频中的对象进行分割

TokenCut&#xff1a;使用自监督 Transformer 和正则化剪切对图像和视频中的目标进行分割 作者&#xff1a;Yangtao Wang, Xi Shen, Yuan Yuan, Yuming Du, Maomao Li, Shell Xu Hu, James L. Crowley, Dominique Vaufreydaz 摘要 在本文中&#xff0c;我们描述了一种基于图…