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,一经查实,立即删除!

相关文章

CentOS7 安装和使用Docker

文章目录 前言一、Docker的主要优势二、安装前必读三、安装Docker的详细步骤1. 安装需要的软件包2. 设置仓库3. 安装Docker方式一 使用官方安装脚本自动安装方式二 选择版本并安装4. Docker运行操作4.1 启动4.2 关闭4.3 运行状态4.4 开机自启四、在没有Sudo的情况下执行Docker命…

软件工程(双语)

教材《软件工程 实践者的研究方法》 双语教学&#xff0c;但目前感觉都是在讲没用的 ”过程决定质量&#xff0c;复用决定效率” 介绍 软工的本质 程序数据结构算法 软件程序文档&#xff08;需求、模型、说明书&#xff09; 软件应用&#xff1a; 系统软件 应用 工程/科学…

Spring Cloud Gateway 中GET请求能正常访问,POST请求出现Unable to handle DataBuffer

报错信息如下&#xff1a; java.lang.IllegalArgumentException: Unable to handle DataBuffer of type class org.springframework.http.server.reactive.UndertowServerHttpRequest$UndertowDataBufferat org.springframework.cloud.gateway.filter.NettyRoutingFilter.getB…

代码随想录笔记|C++数据结构与算法学习笔记-字符串(二)|28. 实现 strStr()、459.重复的子字符串、KMP算法

文章目录 卡码网.右旋字符串28. 实现 strStr()KMP算法(理论)KMP算法(代码)C代码 459.重复的子字符串暴力解法移动匹配KMP解法 卡码网.右旋字符串 卡码网题目链接 略 28. 实现 strStr() 力扣题目链接 文字链接&#xff1a;28. 实现 strStr() 视频链接&#xff1a;帮你把KMP算法…

JAVA刷题 字符操作串各种方法总结(随时更新)

写在前面 JAVA万能头&#xff1a; import java.io.*; import java.util.*;JAVA字符串方法参数操作 谨记【左闭右开】原则 一、substring()方法 两个参数&#xff1a; 字符串.substring(参数1&#xff0c;参数2); 参数1&#xff1a;字符串截取的起始下标&#xff0c;非负的整…

CentOS yum安装MongoDB的详细教程

一、准备工作 打开终端或SSH会话&#xff0c;并使用root或具有管理员权限的用户登录到CentOS服务器。 二、添加MongoDB的源 执行以下命令添加MongoDB的存储库 sudo vi /etc/yum.repos.d/mongodb-org.repo 在编辑器中&#xff0c;复制并粘贴以下内容 [mongodb-org-6.0] name…

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

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

GEE学习——初学者如何下载指定区域的Sentinel-2影像

简介 初学者如何下载指定区域的Sentinel-2影像? 初学者可以按照以下步骤利用Google Earth Engine(GEE)下载指定区域的Sentinel-2影像: 登录GEE账号并打开代码编辑器。代码编辑器位于GEE主页左上角的"Code Editor"按钮。 在代码编辑器中,点击左上角的"App…

自定义高亮文字的textview,匹配关键字词高亮,匹配可拆分的字词高亮

自定义高亮文字的textview&#xff0c;匹配关键字词高亮&#xff0c;匹配可拆分的字词高亮 import android.graphics.Color; import android.text.SpannableString; import android.text.Spanned; import android.text.style.ForegroundColorSpan;import java.util.regex.Match…

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应用中必…

蓝桥算法练习系统—卡勒沃夫之弱水路三千(提高型)(拓扑排序)

问题描述 锦瑟年华谁与度 莫问情归处 只影向斜阳 剑吼西风 欲把春留驻   天涯芳草无归路 回首花无数 解语自销魂 弱袂萦春 尘缘不相误   ......   在卡勒沃夫充满文学杀伤力的声音中&#xff0c;身处紫荆2号楼202B的四位远近高低各不同的室友纷纷回忆起了各自波澜起伏的过…

【合合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 可以用来触发内存的追踪捕捉或者外部仪器的行为,反之亦然。这种…

java项目的文件结构

java项目的文件结构 commomconfigcontorlledtoentity 在一个典型的 Java 项目中&#xff0c;通常会遵循一定的文件结构约定&#xff0c; 以下是一个常见的 Java 项目文件结构示例&#xff1a;/YourProjectName/src/main/java/com/example/projectMain.java/resourcesconfig.pro…

【华大 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 ​编辑…

AWS ECS安全更新及自动化应对方案

AWS发布了一些重要的安全补丁,旨在修复ECS中发现的一些漏洞和问题。这些更新涉及多个方面,包括服务配置、任务定义等。为了确保我们的应用程序和基础设施的安全性,我们有必要及时采纳这些更新。 在本文中,我将分享一段Python代码,它利用AWS SDK(Boto3)与ECS进行交互,自动强制为…

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

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