List系列集合:ArrayList、LinkedList --java学习笔记

List系列集合

特点:有序、可重复、有索引

  • ArrayList:有序、可重复、有索引
  • LinkedList:有序、可重复、有索引

List集合的特有方法

  • List集合因为支持索引,所以多了很多与索引相关的方法,当然,Collection的功能List也都继承了

代码演示:

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

public class ListTest1 {
    public static void main(String[] args) {
        // 1.创建一个ArrayList集合对象(有序、可重复、有索引)
        List<String> list = new ArrayList<>();  //一行经典代码,多态写法
        list.add("愚者");
        list.add("正义");
        list.add("倒吊人");
        list.add("太阳");
        System.out.println(list);   //[愚者, 正义, 倒吊人, 太阳]
        //2.public void add(int index,E element):在某个索引位置插入元素。
        list.add(2,"魔术师");  //在索引位置为2的地方插入元素
        System.out.println(list);   //[愚者, 正义, 魔术师, 倒吊人, 太阳]
        //3.public E remove(int index):根据索引删除元素,返回被删除元素
        String name = list.remove(3);   //删除索引为3的元素并返回
        System.out.println(list);   //[愚者, 正义, 魔术师, 太阳]
        System.out.println(name);   //倒吊人
        // 4.public E get(int index):返回集合中指定位置的元素。
        String name2 = list.get(3);     //返回索引为3的元素
        System.out.println(list);   //[愚者, 正义, 魔术师, 太阳]
        System.out.println(name2);  //太阳
        //5.public E set(int index,E element): 修改索引位置处的元素,修改成功后,会返回原来的数据
        String name3 = list.set(3,"隐者");    //修改索引为3的元素的内容,原内容返回
        System.out.println(name3);  //太阳
        System.out.println(list);   //[愚者, 正义, 魔术师, 隐者]
    }
}

运行结果:

List集合的遍历方式

  1. for循环(因为List集合有索引)
  2. 迭代器
  3. 增强for循环
  4. Lambda表达式

代码演示:

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

public class ListTest2 {
    public static void main(String[] args) {
        // 1.创建一个ArrayList集合对象(有序、可重复、有索引)
        List<String> list = new ArrayList<>();  //一行经典代码,多态写法
        list.add("愚者");
        list.add("正义");
        list.add("倒吊人");
        list.add("太阳");
        System.out.println(list);   //[愚者, 正义, 倒吊人, 太阳]
        //(1)for循环
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));   //愚者 正义 倒吊人 太阳
        }
        System.out.println("-------------------------------------");
        //(2)迭代器
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());    //愚者 正义 倒吊人 太阳
        }
        System.out.println("-------------------------------------");
        //(3)增强for循环()
        for (String s : list) {
            System.out.println(s);  //愚者 正义 倒吊人 太阳
        }
        System.out.println("-------------------------------------");
        //(4)JDK 1.8开始之后的Lambda表达式
        list.forEach(System.out::println);  //愚者 正义 倒吊人 太阳
    }
}

运行结果:

ArrayList集合的底层原理

ArrayList集合与LinkedList集合底层采用的数据结构不同,应用场景不同

  • 数据结构:存储、组织数据的方式

ArrayList集合的底层原理

ArrayList集合是基于数组实现的

  • 数组:内存中的一块连续区域,把该区域分成若干个相等的小区域,每个区域都有自己的索引,每个区域都存一个数据
  • 数组的基本特点:
    查询速度快(注意,是根据索引查询数据快)
    删除效率低:
    可能需要把后面很多数据进行前移
    添加效率极低:可能需要把后面很多的数据后移,再添加元素;或者也可能需要进行数组的扩容
  • 总结:查询快,增删慢

Arraylist集合的底层原理:

  • 利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组
  • 添加第一个元素时,底层会创建一个新的长度为10的数组
  • 存满时,会扩容1.5倍
  • 如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准

ArrayList集合适合的应用场景

1、ArrayLis集合t适合:根据索引查询数据比如根据随机索引取数据:(高效)!或者数据量不是很大时!
2、ArrayList集合不适合:数据量大的同时又要频繁的进行增删操作!

LinkedList集合的底层原理

LinkedList集合是基于双链表实现的

什么是链表?

  • 一种数据结构
  • 链表中的结点是独立的对象,在内存中是不连续的,每个结点包含数据值和下一个结点的地址

链表的特点1:查询慢,无论查询哪个数据都要从头开始找
链表的特点2:链表增删相对快

双链表:在记录下一个结点的基础上,也记录了上一个结点的位置

LinkedList的特点:查询慢,增删相对较快,但对首尾元素进行增删改查的速度是极快的

LinkedList新增了:很多首尾操作的特有方法

LinkedList集合适合的应用场景

  • LinkedList的应用场景之一:可以用来设计队列(先进先出,后进后出),只是在首尾增删元素,用Linkecllist来实现很合适!

代码演示:

import java.util.LinkedList;

public class ListTest3 {
    public static void main(String[] args) {
        LinkedList<String> queue = new LinkedList<>();
        //入队
        queue.addLast("one");
        queue.addLast("two");
        queue.addLast("three");
        queue.addLast("four");
        System.out.println(queue);  //[one, two, three, four]
        //出队
        System.out.println(queue.removeFirst());    //one
        System.out.println(queue.removeFirst());    //two
        System.out.println(queue.removeFirst());    //three
        System.out.println(queue);  //[four]
    }
}
  • LinkedList的应用场景之二:可以用来设计栈(后进先出,先进后出),只是在首部增删元素,用Linkecllist来实现很合适!

代码演示:

import java.util.LinkedList;

public class ListTes4 {
    public static void main(String[] args) {
        LinkedList<String> stack = new LinkedList<>();
        //压栈push
        stack.push("第一颗子弹");
        stack.push("第二颗子弹");
        stack.push("第三颗子弹");
        stack.push("第四颗子弹");
        System.out.println(stack);  //[第四颗子弹, 第三颗子弹, 第二颗子弹, 第一颗子弹]
        //出栈pop
        System.out.println(stack.pop());    //第四颗子弹
        System.out.println(stack.pop());    //第三颗子弹
        System.out.println(stack.pop());    //第二颗子弹
        System.out.println(stack);  //[第一颗子弹]
    }
}

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

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

相关文章

Visual Studio 插件 AnAPI++ for VS 2022

Anmial API abbreviation AnAPIis an automatically generated WebAPI project that has encapsulated Jwt Oauth2 token authentication, SqlSugar, Swagger, Nlog, Cross domain technologies, and supports Net6 and above versions Anmial API缩写AnAPI是一个自动生成的Web…

pytest简介以及命令行执行

pytest简介以及安装 pytest简介导入第三方库修改工具类 pytest命令方式执行函数执行pytest中的参数详解 pytest简介 pytest有很多强大的插件 pytest-html &#xff08;生成html格式的自动化测试报告&#xff09; pytest-xdist &#xff08;测试用例分布式执行&#xff0c;多cpu…

如何在 Odoo 17 中创建进度条

Odoo 提供各种字段小部件&#xff0c;例如单选按钮、浮点数、百分比、颜色选择器、复选框、状态栏和 URL。通过使用不同的渲染模板&#xff0c;我们可以使用小部件修改视图。它还帮助我们根据自己的需求进行设计&#xff0c;从而简化、加速、扩展和提高开发效率。在本博客中&am…

三分钟教会你水果音乐编曲软件 FL Studio v21.2.3 中文免费版安装方法

随着数字音乐制作的发展&#xff0c;音乐编曲软件已经成为音乐制作人和爱好者不可或缺的工具。FL Studio v21.2.3是一款功能强大的水果音乐编曲软件&#xff0c;它具有直观的界面&#xff0c;易于学习和使用。本文将介绍FL Studio v21.2.3的特点和优势&#xff0c;以及它在音乐…

cloudflare 应用例子几则

Cloudflare&#xff08;以下简称 CF&#xff09; 堪称互联网活菩萨&#xff0c;造就一大批高质量的互联网基础技术服务&#xff0c;更难得的是&#xff0c;几乎所有的服务都有对应的免费的套餐&#xff0c;而且出手大方&#xff0c;基本上有足够的容量或请求次数。 CDN CF 最…

Amazon Aurora Limitless Database :数据库管理的全新境界

在当今数亿用户、PB 级数据和数百万交易的业务环境中&#xff0c;数据库管理面临着巨大的挑战。传统数据库扩展的繁琐性和耗时性使得许多组织需要花费数月甚至数年的时间来构建自定义软件以满足其极端的工在当今数亿用户、PB 级数据和数百万交易的业务环境中&#xff0c;数据库…

美易官方:美股维持涨势,三大股指再创新高

在今日的早盘交易中&#xff0c;美股市场继续维持其涨势&#xff0c;三大股指再次刷新历史纪录。市场信心受到一系列积极经济数据的支撑&#xff0c;投资者对未来的经济增长和企业盈利保持乐观态度。 首先&#xff0c;让我们来看一下道琼斯工业平均指数的表现。该指数在早盘交易…

思科无线控制器配置学习

文章目录 简单拓扑WLC配置 简单拓扑 WLC配置 WLC#show running-config Building configuration...Current configuration : 11943 bytes ! ! Last configuration change at 16:22:44 UTC Thu Mar 14 2024 by admin ! version 17.9 service timestamps debug datetime msec se…

微信小程序开发之创建一个自己的项目和项目目录下各个文件的了解

1、小程序开发工具基础 &#xff08;1&#xff09;菜单栏&#xff1a;可以对开发工具进行一些简单的设置&#xff0c;还可以在帮助一行获取学习相关api文档 &#xff08;2&#xff09;模拟器显示栏&#xff1a;每当我们在进行便写好代码之后&#xff0c;通过编译可以在模拟显示…

运维-[frp配置内网服务器访问外网]

背景 同一局域网里面&#xff0c;两台服务器A服务器可以访问外网&#xff0c;代理端口为10809&#xff0c;B服务器不可访问外网 实现工具 通过frp进行内网穿透配置代理服务 配置 A服务器配置 A服务器配置frp客户端 配置文件-frpc.ini server_addr:B服务器IP server_port:B服务…

ATG-3080功率信号源的应用领域有哪些

功率信号源是一种用于提供稳定功率输出的电子设备&#xff0c;它在许多应用领域中发挥着重要作用。下面西安安泰将详细介绍功率信号源的几个常见应用领域。 电子测试和测量&#xff1a;功率信号源广泛应用于各种电子测试和测量场景。它可以提供稳定的功率输出&#xff0c;用于测…

六面体单元热应力问题有限元求解 | Matlab源码 | 理论文本 | 温度应力 | 热应变 |温度应变 |热力耦合

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

非标图纸管理系统,非标图纸管理系统哪家好

非标图纸管理系统 是指专门用于管理非标准化设计图纸的系统。非标设计图纸是指不符合标准规范的设计图纸&#xff0c;可能是由于特殊需求、个性化定制或者其他原因引起的。这些非标设计图纸可能包括产品设计图、建筑设计图、工艺设计图等。非标图纸管理系统哪家好择彩虹图纸管理…

Juniper SRX 防火墙基础上网配置

简介 基于PNET-LAB模拟器&#xff0c;使用 vSRX-NG 23.4R1.9 镜像进行实验。 博客&#xff1a;https://songxwn.com/Juniper-SRX-snat/ 实验需求 配置WAN口 LAN口&#xff0c;实现基础的上网功能。配置NAT、DHCP。 ISP 路由器使用Cisco IOS模拟&#xff0c;与SRX对接口配置…

洛谷入门——P1765 手机

手机 题目描述 一般的手机的键盘是这样的&#xff1a; 要按出英文字母就必须要按数字键多下。例如要按出 x \tt x x 就得按 9 9 9 两下&#xff0c;第一下会出 w \tt w w&#xff0c;而第二下会把 w \tt w w 变成 x \tt x x。 0 0 0 键按一下会出一个空格。 你的任务是…

CasaOS玩客云使用Docker部署21.6K星星memos开源云笔记服务

文章目录 前言1. 使用Docker部署memos2. 注册账号与简单操作演示3. 安装cpolar内网穿透4. 创建公网地址5. 创建固定公网地址 前言 本文主要介绍如何在CasaOS玩客云&#xff0c;使用Docker本地部署21.6K stars的热门开源云笔记服务memos&#xff0c;并结合cpolar内网穿透工具打…

四十八岁男子心慌心悸,失眠,喉咙有异物,刘家峰告诉你怎么办!

植物神经功能紊乱&#xff0c;通常简称为植物神经紊乱&#xff0c;是一种涉及自主神经系统的失调疾病。自主神经系统负责控制人体内许多自动功能&#xff0c;如心率、血压、消化和体温调节。植物神经功能紊乱是指由于自主神经系统失衡导致的一系列症状和体征的综合症。 植物神经…

嵌入式和 Java选哪个?

今日话题&#xff0c;嵌入式和 Java 走哪个?对于嵌入式领域有浓厚兴趣的人&#xff0c;并不会比Java行业薪资低&#xff0c;处于上中游水平。特别是从2020年开始&#xff0c;嵌入式领域受益于芯片产业的兴起&#xff0c;表现出了强劲的增长势头。薪资水平受多方面因素影响。嵌…

鸿蒙:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数组项class&#xff0c;或者class的属性是class&#xff0c;他们的第二层的属性变化是无法观察到的。这就引出了Observed/Object…

34-Java传输对象模式 ( Transfer Object Pattern )

Java传输对象模式 实现范例 传输对象模式&#xff08;Transfer Object Pattern&#xff09;用于从客户端向服务器一次性传递带有多个属性的数据传输对象也被称为数值对象&#xff0c;没有任何行为传输对象是一个具有 getter/setter 方法的简单的 POJO 类&#xff0c;它是可序列…