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());    //oneSystem.out.println(queue.removeFirst());    //twoSystem.out.println(queue.removeFirst());    //threeSystem.out.println(queue);  //[four]}
}
  • LinkedList的应用场景之二:可以用来设计栈(后进先出,先进后出),只是在首部增删元素,用Linkecllist来实现很合适!

代码演示:

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

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

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

相关文章

什么是UI设计?适合做UI设计的软件有哪些?

人们常说 UI 和 UI 设计&#xff0c;但到底什么是 UI 设计&#xff1f;UI 设计的原则是什么&#xff1f;实际上 “UI" 也就是 User Interface&#xff0c;它是用户界面的缩写。一般指用户操作界面&#xff0c;即软件程序、网站或设备的图形部分&#xff0c;用户与之互动。…

MyBatis3源码深度解析(十九)MyBatis日志实现

文章目录 前言第七章 MyBatis日志实现7.1 Java日志体系7.1.1 常用日志框架7.1.2 Java日志发展史7.1.3 日志接口与日志实现的绑定 7.2 MyBatis日志实现7.2.1 Log接口7.2.2 LogFactory工厂7.2.3 MyBatis日志自动查找7.2.4 MyBatis日志类型配置 7.3 小结 前言 日志是Java应用中必…

【合合TextIn】深度解析智能文档处理技术与应用

目录 一、智能文档处理介绍 二、文档格式解析 三、图像增强技术解析 四、传统文字识别OCR技术解析 五、深度学习OCR技术解析 六、深度学习版面分析技术解析 七、文档分类 八、信息抽取 九、系统集成&#xff1a;将IDP处理后的数据集成到企业系统 结论 一、智能文档处…

机器学习-06-无监督算法-01-划分聚类Kmeans算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中无监督算法&#xff0c;包括划分聚类等。 参考 数据分析实战 | K-means算法——蛋白质消费特征分析 欧洲48国英文名称的来龙去脉及其国旗动画 Kmeans在线动态演示 本门课程的目标 完成一个特定行业的…

如何与手机共享笔记本电脑的互联网?这里提供详细步骤

这篇文章介绍了如何通过将手机变成Wi-Fi热点来与手机共享笔记本电脑的互联网连接。 如何共享笔记本电脑的互联网连接 你可以通过Wi-Fi或有线共享笔记本电脑的数据连接,具体取决于你的设置。 Windows Windows允许你通过ICS共享你的互联网连接。ICS,或称互联网连接共享,是W…

ARM Coresight 系列文章 11.1 -- CoreSight Cortex-M33 CTI 详细介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 CTI 的工作原理CTI 主要特点CTI的使用场景CTI 的工作原理 CTI 允许不同的调试和追踪组件之间基于特定事件进行交互。例如,当一个断点被命中时,CTI 可以用来触发内存的追踪捕捉或者外部仪器的行为,反之亦然。这种…

【华大 HC32L110】调用`printf`和串口接收中断的冲突问题解决

华大单片机 HC32L110调用printf和串口接收中断的冲突问题解决&#xff0c;经过查找是官方库 去使能了 串口的接收功能&#xff0c;记录解决问题的过程 目录 1.硬件MCU资料2. printf和串口接收中断的冲突解决3.重新封装 fputc 函数4.查找问题&#xff0c;发现是官方库配置有误5.…

无线局域网——wlan

目录 一.wlan的含义和发展 二.wlan技术带来的挑战 1.企业办公场景多样 2.位置速度的要求 3.安全的要求 4.规范的挑战 三.家庭和企业不同的部署需求 1.胖AP模式组网 2.AC瘦AP模式组网 3.组网模式的不同 四.三层隧道转发实验 1.拓扑 2.AP上线 核心交换机vlan ​编辑…

探索海外市场舆情:云手机助力企业赢得全球竞争

在全球化的趋势下&#xff0c;越来越多的企业将目光投向海外市场&#xff0c;迎接着无尽的商机与挑战。然而&#xff0c;随之而来的是境外市场舆情的复杂变化&#xff0c;对企业的声誉和发展带来了潜在风险。如何准确、及时地掌握境外市场的舆情动向&#xff0c;成为了企业必须…

Midjourney发布新特性风格参考

1. 引言 最近&#xff0c;Midjourney 推出了Style Reference V2.0 即功能更加强大的风格参考工具&#xff0c;该工具可以让大家参考其他图像的风格&#xff0c;生成与参考图像风格保持一致&#xff0c;与文本提示词语义内容保持一致的图像。它与图像提示类似&#xff0c;但是只…

Day03-数据库管理(事务管理,用户管理,MySQL8的部分新特性)

文章目录 Day03 数据库管理学习目标1. 事务管理1.1 事务的概念1.2 事务的特性1.3 语法1.4 事务的并发问题1.5 事务隔离级别1.6 设置和查看隔离级别 2 用户管理2.1 创建删除用户2.2 权限管理2.2.1 权限赋予的原则2.2.2 权限赋予2.2.3 权限回收2.2.4 登录管理 3. MySQL8的部分新特…

Java中的I/O讲解(超容易理解)(下篇)

如果想观看更多Java内容 可上我的个人主页关注我&#xff0c;地址子逸爱编程-CSDN博客https://blog.csdn.net/a15766649633?typeblog 使用工具 IntelliJ IDEA Community Edition 2023.1.4 使用语言 Java8 代码能力快速提升小方法&#xff0c;看完代码自己敲一遍&#xff0…

简易指南:国内ip切换手机软件怎么弄

在网络访问受到地域限制的情况下&#xff0c;使用国内IP切换手机软件可以帮助用户轻松访问被屏蔽的内容&#xff0c;扩展网络体验。以下是虎观代理小二分享的使用国内IP切换手机软件的简易指南。并提供一些注意事项。 如何在手机上使用国内IP切换软件 步骤一&#xff1a;选择I…

idea2023 运行多 springboot 实例

概要 1、修改idea运行多实例&#xff08;本地测试负载&#xff09; 你可能用到其他 1、改造项目缓存token 至redis 支持负载均衡部署 SpringSecurity6.0RedisJWTMP基于token认证功能开发&#xff08;源码级剖析可用于实际生产项目&#xff09;_springsecurity redis管理token…

嵌入式学习第二十九天!(数据结构的概念、单向链表)

数据结构&#xff1a; 1. 定义&#xff1a; 一组用来保存一种或者多种特定关系的数据的集合&#xff08;组织和存储数据&#xff09; 1. 程序设计&#xff1a; 将现实中大量而复杂的问题以特定的数据类型和特定的数据结构存储在内存中&#xff0c;并在此基础上实现某个特定的功…

安装调试kotti_ai:AI+互联网企业级部署应用软件包@riscv+OpenKylin

先上结论&#xff1a;riscvOpenKylin可以安装pyramidkottikotti_ai 但是paddle_serving_client无法安装&#xff0c;项目的AI实现部分需要改用其它方法&#xff0c;比如onnx。最终onnx也没有装成&#xff0c;只好用飞桨自己的推理。 安装kotti pip install kotti 安装kotti和…

postman测试文件上传接口

java里编写一个导入接口&#xff0c;接口的入参就是一个文件&#xff0c;此时接口中使用的接收参数是 用postman测试这个接口时&#xff1a;Body里选择类型是form-data Header中自动修改了Content-Type 如果既要上传文件&#xff0c;又要输入参数可使用如下方式&#xff1a; 此…

训练svm并部署树莓派

训练svm并部署树莓派 开发环境1. 准备数据集2. 训练模型3. 部署模型开发环境 vscode python 3.8 用到的库: scikit-learn==1.3.2 pickle torch pandas matplotlib 1. 准备数据集 数据为xls文件,如下格式 2. 训练模型 文件结构 执行训练 python代码 import pickle &…

递归和递推的区别

目录 1、递推 2、递归 3、结言 递归 递推 1、递推 递推就是说从初值出发后一直运算到所需的结果。 ——从已知到未知。&#xff08;从小到大&#xff09; 举一个简单的例子&#xff1a; 每天能学习一个小时的编程&#xff0c;那么一个月之后可以学到三十小时的编程知识。…

vue项目突然报错 error Insert `⏎·········` prettier/prettier

vs设置了保存时自动格式化代码&#xff0c;突然就报错&#xff1a; 解决方法&#xff0c;在.eslintrc.js最后添加一行&#xff1a;prettier/prettier: off&#xff0c; 然后重新运行