(二十四)List系列集合

news2024/12/25 1:59:58

目录

        前言:

        一、List集合的特有方法

二、List集合的遍历方式有几种?

三、Arraylist集合底层原理

四、LinkedList的特点


前言:

        List集合包括JavaList接口以及List接口的所有实现类。List集合中的元素允许重复,各元素的顺序放是对象插入的顺序,类似Java中的数组,用户可通过使用索引(元素在集合中的位置)来访问集合中的元素。

        List的最重要的特征就是有序;它会确保以一定的顺序保存元素。List在Collection的基础上添加了大量方法,使之能在序列中间插入和删除元素。(只对LinkedList推荐使用。)

        List可以制造ListIterator对象,你除了能用它在List的中间插入和删除元素之外,还能用它沿两个方向遍历List。

一、List集合的特有方法

        List集合因为支持索引,所以多了很多索引操作的独特API,其他Collection的功能List也都继承了。

 

2.代码演示:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
​
/**List
 * Arraylist  Linkedlist 有序、可重复、有索引
 * LinkList :API
 * addFirst(E,e)  在该列表开头插入指定的元素
 * addLast(E,e)  将指定的元素追加到此列表的末尾
 * getFirst()  返回此列表的第一个元素
 * getLast()  返回此列表的最后一个元素
 * removeFirst()  删除并返回第一个元素
 * removeLast()  删除并返回最后一个元素
 */
​
/**集合并发修改异常问题
 * 找出某些元素并修改时容易出并发修改异常问题
 */
public class List_Demo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("JAVA");
        list.add("JAVA");
        list.add("MYsql");
        list.add("Python");
        //在某个索引位置添加数据
        list.add(2, "html");
        System.out.println(list);
        //根据索引删除元素
        System.out.println(list.remove(2));
        System.out.println(list);
        //根据索引获取元素
        System.out.println(list.get(2));
        //修改索引位置的元素 ,返回修改前的数据
        System.out.println(list.set(1, "Myprict"));
        System.out.println(list);
    }
}

3.List的实现类的底层原理

        ArrayList底层是基于数组实现的,根据查询元素快,增删相对慢;

        linkedList底层是基于双链表实现的,查询元素慢,增删首尾元素是非常快的。

二、List集合的遍历方式有几种?

                ①迭代器

                ②增强for循环

                ③Lambda表达式

                ④for循环(因为List集合存在索引)

4.代码演示:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
​
public class ListDemo2 {
    public static void main(String[] args) {
        List<String> lists = new ArrayList<>();
        lists.add("JAVA");
        lists.add("JAVA");
        lists.add("MYsql");
        lists.add("Python");
        //1.for循环
        System.out.println("--------------");
        for (int i = 0; i < lists.size(); i++) {
            String ele = lists.get(i);
            System.out.println(ele);
        }
        //2.迭代器
        System.out.println("--------------");
        Iterator<String> it = lists.iterator();
        while (it.hasNext()){
            String ele = it.next();
            System.out.println(ele);
        }
        //3.foreach
        System.out.println("-----------");
        for (String ele : lists) {
            System.out.println(ele);
        }
        //4.Lambda表达式
        System.out.println("--------------");
        lists.forEach(s -> {
            System.out.println(s);
        });
    }
}

三、Arraylist集合底层原理

        Arraylist集合底层是基于数组实现的:根据索引定位元素快,增删需要做元素的移位操作。

        第一次创建集合并添加第一个元素的时候,在底层创建一个默认长度为10的数组。

四、LinkedList的特点

        底层数据结构是双链表,查询慢,首尾操作的速度是极快的,所以多了很多首尾操作的特有API。

5.LinkedList集合的特有功能

6.代码演示:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
​
/**List
 * Arraylist  Linkedlist 有序、可重复、有索引
 * LinkList :API
 * addFirst(E,e)  在该列表开头插入指定的元素
 * addLast(E,e)  将指定的元素追加到此列表的末尾
 * getFirst()  返回此列表的第一个元素
 * getLast()  返回此列表的最后一个元素
 * removeFirst()  删除并返回第一个元素
 * removeLast()  删除并返回最后一个元素
 */
​
/**集合并发修改异常问题
 * 找出某些元素并修改时容易出并发修改异常问题
 */
public class List_Demo {
    public static void main(String[] args) {
        //LinkedList可以完成队列结构和栈结构(双链表)
        //栈
        LinkedList<String> stack = new LinkedList<>();
        //入栈
        stack.push("第一颗子弹");
        stack.addFirst("第二颗子弹");
        stack.addFirst("第三颗子弹");
        stack.addFirst("第四颗子弹");
        stack.addFirst("第五颗子弹");
        stack.addFirst("第六颗子弹");
        System.out.println(stack);
        //出栈
        System.out.println(stack.removeFirst());
        System.out.println(stack.pop());
        System.out.println(stack);
        System.out.println("==================================");
        //队列
        LinkedList<String> queue = new LinkedList<>();
        //入队
        queue.offerLast("1号");
        queue.addLast("2号");
        queue.addLast("3号");
        queue.addLast("4号");
        queue.addLast("5号");
        //出队
        System.out.println(queue.removeFirst());
        System.out.println(queue);
​
        System.out.println("=============================");
        //结合并发修改异常
        //迭代器
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String ele = it.next();
            if ("JAVA".equals(ele)) {
//                list.remove("JAVA");//会报错
                it.remove();//正确
            }
        }
        System.out.println(list);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C生万物 | C语言文件操作指南汇总【内附文件外排序源码】

&#x1f451;作者主页&#xff1a;Fire_Cloud_1 &#x1f3e0;学习社区&#xff1a;烈火神盾 &#x1f517;专栏链接&#xff1a;万物之源——C 文章目录一、为什么使用文件&#xff1f;二、什么是文件&#xff1f;1、程序文件2、数据文件3、文件名三、文件的打开和关闭1、文件…

自动化测试【软件测试】

自动化测试 什么是自动化 有效减少人力的消耗&#xff0c;同时提高生活的质量 通过自动化测试有效减少人力的投入&#xff0c;同时提高了测试的质量和效率 由于回归测试&#xff0c;版本越来越多&#xff0c;版本回归的压力越来越大&#xff0c;仅仅通过人工测试来回归所有版本…

2.3、进程控制

整体框架 1、什么是进程控制&#xff1f; 进程控制的主要功能是对系统中的所有进程实施有效的管理&#xff0c; 它具有创建新进程、撤销已有进程、实现进程状态转换等功能。 简单来说&#xff1a;进程控制就是要实现进程状态转换 2、如何实现进程控制&#xff1f; 2.1、进程…

ATAC-seq分析:TSS 信号(7)

ATACseq ATACseq - 使用转座酶并提供一种同时从单个样本的转录因子结合位点和核小体位置提取信号的方法。 1. 数据类型 上面这意味着我们的数据中可能包含多种信号类型。 我们将从无核小体区域和转录因子&#xff08;我们的较短片段&#xff09;周围获得信号。我们的一部分信号…

2-Spring核心与设计思想

目录 1.Spring是什么&#xff1f; 2.容器是什么&#xff1f; 3.IoC是什么&#xff1f; 3.1.传统程序开发 3.2.控制反转式程序开发 3.3.对比总结规律 4.理解Spring IoC 4.1.将对象(Bean)存入到容器(Spring)&#xff1b; 4.2.从容器中取出对象。 5.DI概念说明 1.Spring…

计算机编程背景

&#x1f496; 欢迎来阅读子豪的博客&#xff08;JavaEE篇 &#x1f934;&#xff09; &#x1f449; 有宝贵的意见或建议可以在留言区留言 &#x1f4bb; 欢迎 素质三连 点赞 关注 收藏 &#x1f9d1;‍&#x1f680;码云仓库&#xff1a;补集王子的代码仓库 不要偷走我小火…

classpath类路径是什么

Spring Boot 一、简介 classpath类路径在 Spring Boot 中既指程序在打包前的/java/目录加上/resource目录&#xff0c;也指程序在打包后生成的/classes/目录。两者实际上指的是同一个目录&#xff0c;里面包含的文件内容一模一样。 二、获取classpath路径 以下两种方式均可…

Icarus Verilog

Icarus Verilog 是一个Verilog仿真工具&#xff0c;以编译器的形式工作&#xff0c;将以verilog编写的源代码编译为某种目标格式。如果要进行仿真的话&#xff0c;可以生成一个vvp的中间格式&#xff0c;由其所附带的vvp命令执行。 https://github.com/steveicarus/iverilog …

面试官:请设计一个能支撑百万连接的系统架构!

目录 1、到底什么是连接&#xff1f;2、为什么每次发送请求都要建立连接&#xff1f;3、长连接模式下需要耗费大量资源4、Kafka遇到的问题&#xff1a;应对大量客户端连接5、Kafka的架构实践&#xff1a;Reactor多路复用6、优化后的架构是如何支撑大量连接的 这篇文章&#x…

SQL Server 全文索引的应用

在公司项目中提出了一个需求&#xff1a; 搜索包含指定关键词的数据。得到这需求后&#xff0c;站在技术角度考虑第一时间就联想到使用SQL里面“like”查询语句。进一步分析需求后&#xff0c;发现“Like”查询满足不到实际的要求。 示例&#xff1a; ---------------------…

【Ajax】接口与接口测试工具PostMan

一、接口接口的概念使用 Ajax 请求数据时&#xff0c;被请求的 URL 地址&#xff0c;就叫做数据接口&#xff08;简称接口&#xff09;。同时&#xff0c;每个接口必须有请求方式。例如&#xff1a;http://www.liulongbin.top:3006/api/getbooks 获取图书列表的接口(GET请求)ht…

【4 - 降维算法PCA和SVD - 案例部分】菜菜sklearn机器学习

课程地址&#xff1a;《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期&#xff1a;sklearn入门 & 决策树在sklearn中的实现第二期&#xff1a;随机森林在sklearn中的实现第三期&#xff1a;sklearn中的数据预处理和特征工程第四期&#xff1a;sklearn中的降维算法…

为何香港的IB状元特别多?

今年IB预科课程&#xff08;The International Baccalaureate Diploma Programme&#xff0c;IBDP&#xff09;公开考试放榜&#xff0c;香港的学校又是大丰收的一年&#xff01;因为香港今年一共有九十三名IB状元&#xff0c;即IB的总分为四十五分满分&#xff0c;而他们全部取…

Linux 环境部署 Nexus 服务

一 私服是什么&#xff1f; 一个特殊的远程仓库&#xff0c;它是架设在局域网内的仓库服务&#xff0c;供局域网内的开发人员使用。 当Maven需要下载构建的使用&#xff0c; 它先从私服请求&#xff0c;如果私服上没有的话&#xff0c;则从外部的远程仓库下载&#xff0c;然后…

算力服务亟待破局,超聚变向新而行

“超聚变已独立活下来。”超聚变产品线总裁范瑞琦在2023新品发布会上透露。自从一年多前从华为体系独立&#xff0c;超聚变公司的未来就颇受业界关注。一方面&#xff0c;算力产业蒸蒸日上&#xff0c;各方尤为关注超聚变的产业定位以及发展算力产业的着力点&#xff1b;另一方…

mysql存储过程的流程控制

本文来说下mysql存储过程的流程控制语句 文章目录流程控制概述IF语句CASE语句LOOP语句LEAVE语句ITERATE语句REPEAT语句WHILE语句本文小结流程控制概述 存储过程中可以使用流程控制来控制语句的执行。 MySQL中可以使用IF语句、CASE语句、LOOP语句、LEAVE语句、ITERATE语句、REPE…

Cesium设置模型朝向速度矢量方向

Cesium设置模型朝向速度矢量方向 文章目录Cesium设置模型朝向速度矢量方向1. 需求场景2. 技术路线2.1 VelocityOrientationProperty2.2 VelocityVectorProperty3. 参考链接1. 需求场景 现有一段飞机起飞、爬升的轨迹数据&#xff0c;需要在Cesium中模拟出飞行过程动画&#xf…

Lesson 3. 线性回归的手动实现(3.3 线性回归手动实现与模型局限 3.4 机器学习模型结果可信度理论与交叉验证基础)

文章目录一、线性回归手动实现与模型局限1. 线性回归的手动实现2. 线性回归模型局限3. 线性回归的决定系数二、机器学习模型结果可信度理论与交叉验证基础1. 机器学习模型结果可信度理论基础与数据集划分1.1 机器学习模型结果可信度基础理论1.2 数据集切分方法1.3 线性回归手动…

图的关键路径(AOE网络)

文章目录AOE网概念性质研究的问题关键路径概念求解的方法注意事项AOE网 概念 用顶点表示事件, 边弧表示活动, 边弧上的权值表示活动持续的时间, 这样的带权有向无环图叫AOE网. AOE网常用于估算工程完成时间. AOE网和AOV网都是有向无环图, 不同之处在于它们的边和顶点所代表的…

【青训营】Go的高质量编程

Go的高质量编程 本文内容总结自字节跳动青年训练营 第五届 后端组 什么是高质量&#xff1f; 各种边界条件是否完备异常情况能正常处理&#xff0c;稳定性有保障易读易维护 Go语言开发者Dave Cheney指出&#xff0c;编程需要遵循以下原则&#xff1a; 简单性 消除多余的复…