集合框架:List系列集合:特点、方法、遍历方式、ArrayList,LinkList的底层原理

目录

List集合

特有方法

遍历方式

1. 使用普通 for 循环:

2. 使用增强型 for 循环(foreach):

3. 使用迭代器(Iterator):

4. 使用 Java 8+ 的流(Stream)API:

ArrayList集合的底层原理

LinkList集合的底层原理


List集合

List系列集合特点: 有序,可重复,有索引
   ArrayList:  有序,可重复,有索引。
   LinkedList:有序,可重复,有索引。

底层实现不同 !适合的场景不同 !

特有方法

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

List(列表):

  • add(E element):在列表末尾添加一个元素。
  • get(int index):获取指定索引位置的元素。
  • set(int index, E element):将指定索引位置的元素替换为新元素。
  • remove(int index):移除指定索引位置的元素。
  • size():返回列表包含的元素个数。

遍历方式

在 Java 中,可以使用不同的方式来遍历 List 系列集合,其中最常用的方式有以下几种:

1. 使用普通 for 循环:

List<String> myList = new ArrayList<>();
myList.add("apple");
myList.add("banana");
myList.add("orange");

for (int i = 0; i < myList.size(); i++) {
    String element = myList.get(i);
    System.out.println(element);
}

2. 使用增强型 for 循环(foreach):
 

List<String> myList = new ArrayList<>();
myList.add("apple");
myList.add("banana");
myList.add("orange");

for (String element : myList) {
    System.out.println(element);
}

3. 使用迭代器(Iterator):
 

List<String> myList = new ArrayList<>();
myList.add("apple");
myList.add("banana");
myList.add("orange");

Iterator<String> iterator = myList.iterator();
while (iterator.hasNext()) {
    String element = iterator.next();
    System.out.println(element);
}

4. 使用 Java 8+ 的流(Stream)API:
 

List<String> myList = new ArrayList<>();
myList.add("apple");
myList.add("banana");
myList.add("orange");

myList.stream().forEach(System.out::println);

以上就是常见的 List 系列集合的遍历方式。

ArrayList集合的底层原理

当我们使用 ArrayList 时,可以将它类比为一个动态调整大小的容器。它内部通过一个数组来存储元素,数组的长度会根据需要自动扩展或收缩。

初始时,ArrayList 是一个空的容器,没有任何元素。当我们往 ArrayList 中添加元素时,它会检查当前数组是否已满。如果已满,就会创建一个更大的数组,并将所有元素从旧数组复制到新数组中。这样,就腾出了更多的空间来容纳新的元素。

同样地,如果我们从 ArrayList 中删除元素,它会自动调整数组的大小,以便节省内存空间。

由于 ArrayList 使用数组来存储元素,所以我们可以通过索引来快速访问元素,这就像找到数组中特定位置的元素一样方便和快速。

总结起来,ArrayList 可以看作是一个可调整大小的容器,它能够自动扩展和收缩内部的数组,以适应添加和删除元素的需求,并通过索引提供快速访问元素的能力。 

LinkList集合的底层原理

当我们使用 LinkedList 时,可以将它看作是一个双向链表每个节点包含一个值和两个引用,一个引用指向前一个节点,另一个引用指向后一个节点

初始时,LinkedList 是一个空的链表,没有任何节点。当我们往 LinkedList 中添加元素时,它会创建一个新的包含元素值的节点,并在链表的末尾添加这个新节点。如果链表为空,这个新节点就是头节点和尾节点。

同样地,如果我们从 LinkedList 中删除元素,它会找到包含要删除元素的节点,并在链表中将这个节点移除。(如何定位要删除节点的位置,可以使用元素值或者索引来操作。)节点之间的引用会被调整以确保链表的完整性。

由于 LinkedList 是一个双向链表,因此它可以高效地添加或删除元素,而不必像 ArrayList 一样进行数组的拷贝操作。但这也意味着它不支持通过索引直接访问元素,随机访问元素的效率比 ArrayList 低。

总结起来,LinkedList 可以看作是一个双向链表,它可以高效地添加或删除元素,但访问元素时效率较低。

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

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

相关文章

Python按类别和比例从Labelme数据集中划分出训练数据集和测试数据集

Python按类别和比例从Labelme数据集中划分出训练数据集和测试数据集 前言前提条件相关介绍实验环境按类别和比例从Labelme数据集中划分出训练数据集和测试数据集代码实现输出结果 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#x…

六大排序算法:插入、选择、冒泡、快排、希尔、归并

1、插入排序 解析&#xff1a;第一个元素设定为已经排好序&#xff0c;依次选择后续的元素插入到已经排好序的组内进行排序。 图示&#xff1a; 代码&#xff1a; public static void insertionSort(int[] arr) {int n arr.length;for (int i 1; i < n; i) {int key a…

视频剪辑高手的秘诀:如何从视频中提取封面,提高视频点击率

在视频分享平台上&#xff0c;一个吸引人的封面往往能吸引更多的观众点击。一个好的封面可以传达视频的主题&#xff0c;吸引人们的兴趣&#xff0c;提高视频的点击率。那么&#xff0c;如何从视频中提取封面呢&#xff1f;下面&#xff0c;让我们一起来看看云炫AI智剪如何操作…

计算机网络期末复习-Part1

1、列举几种接入网技术&#xff1a;ADSL&#xff0c;HFC&#xff0c;FTTH&#xff0c;LAN&#xff0c;WLAN ADSL&#xff08;Asymmetric Digital Subscriber Line&#xff09;&#xff1a;非对称数字用户线路。ADSL 是一种用于通过电话线连接到互联网的技术&#xff0c;它提供…

小白该如何学习Linux操作系统?

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 Linux作为一种开源操作系…

行人检测综述 之 精华提取——图表与挑战

From Handcrafted to Deep Features for Pedestrian Detection:A Survey 从手工制作到深度特征的行人检测&#xff1a;一项调查 调查内容&#xff1a; 关于行人检测的传统算法和深度学习算法&#xff1b;关于行人检测的单光谱检测和多光谱检测&#xff1b;关于行人检测的多种数…

2023.11.09 homework (2)

【七年级上数学】 教别人也是教自己&#xff0c;总结下&#xff1a; 13&#xff09;找规律的题目&#xff0c;累加题目&#xff0c;要整体看&#xff0c;不然不容易算出来&#xff0c;求最大值&#xff0c;那么就是【最大值集群和】减去【最小集群和】就是最大值 9-12&#x…

falsk框架中安装flask-mysqldb报错解决方案

错误示例 我的是py37版本&#xff0c;无法直接安装flask-mysqldb pip install flask-mysqldb报错如下 解决方案 先去第三方库 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 下载mysqlclient 这个是我的版本 mysqlclient-1.4.6-cp37-cp37m-win_amd64.whl 下…

数据权限-字段权限【实践篇-结合相关业务详细讲解如何实现】(基于若依框架)

理论看这个 https://blog.csdn.net/weixin_41842550/article/details/119890216 这里写目录标题 按照部门结构和用户数据来实现数据权限一 需要的基础数据1 系统管理--部门管理--增加如下结构2 系统管理--角色管理--增加两个角色3 系统管理--用户管理--增加7个用户 二 截图和代…

35岁危机来临前,程序员如何未雨绸缪?

程序员逼近35岁”高龄“&#xff0c;救命。。。 &#xff08;目瞪口呆)什么&#xff1f; 程序员而立之年&#xff0c;为未来担忧&#xff1f;&#xff08;双手抱头不敢置信&#xff09; 不可能&#xff01;他们明明那么努力、那么辛苦了&#xff01;&#xff01;&#xff01;&a…

SQL审计是什么意思?目的是什么?有什么好处?

很多刚入行的运维小伙伴对于SQL审计不是很了解&#xff0c;不知道其是什么意思&#xff1f;使用SQL审计的目的是什么&#xff1f;使用SQL审计的好处有哪些&#xff1f;这里我们大家就来一起聊聊&#xff0c;仅供参考哈&#xff01; SQL审计是什么意思&#xff1f; 【回答】&…

【原理篇】三、SpringBoot自动配置原理

文章目录 0、背景demo1、自动配置思路2、META-INF/spring.factories3、Redis自动配置4、自定义一个自动配置5、排除SpringBoot内置自动配置类的加载6、补充点&#xff1a;ApplicationContextAware接口 0、背景demo 用一个循序渐进的示例来体验属性配置&#xff0c;方便后面理解…

Oracle 安装及 Spring 使用 Oracle

参考内容&#xff1a; docker安装oracle数据库史上最全步骤&#xff08;带图文&#xff09; Mac下oracle数据库客户端 Docker安装Oracle docker能安装oracle吗 Batch script for add a auto-increased primary key for exist table with records Docker 安装 Oracle11g 注意&a…

用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组

目录 一、冒泡排序 1.冒泡排序介绍 2.排序的思路 3.完整代码 二、折半查找 1.折半查找介绍 2.查找的思路 3.完整代码 三、逆序数组 1.逆序思路 2..完整代码 一、冒泡排序 冒泡排序是众多排序的一种&#xff0c;无论在C语言或者Java中都很常见&#xff0c;后续在数据…

浅谈智能变电站自动化系统的应用与产品选型

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;现如今&#xff0c;智能变电站发展已经成为了电力系统发展过程中的内容&#xff0c;如何提高智能变电站的运行效率也成为电力系统发展的一个重要目标&#xff0c;为了能够更好地促进电力系统安全稳定运行&#xff0c;…

轻量封装WebGPU渲染系统示例<22>- 渲染到纹理(RTT)(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/RTTTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下: export class RTTTest {private mRscene new RendererScene()…

使用 Threejs 从基础开始构建 3D 地球

需求 threejs学习-3D 地球 实现&#xff1a; 1、使用粒子效果模拟宇宙星空 2、贴图、模型等资源的加载 3、加载资源的监听 4、效果合成器 EffectComposer 的初级使用 5、在地球上设置坐标以及坐标涟漪动画 6、标点间建立飞线 7、简单动画建议先浏览一遍git地址上代码&#xff…

SpringMVC简介

SpringMVC简介 一、MVC是什么二、什么是SpringMVC&#xff1f;1.特点 三、简单实现 一、MVC是什么 MVC是模型视图控制器的简称&#xff0c;是指一种架构思想。 M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据。 JavaBean分为…

A Survey on Neural Network Interpretability

A Survey on Neural Network Interpretability----《神经网络可解释性调查》 摘要 随着深度神经网络的巨大成功&#xff0c;人们也越来越担心它们的黑盒性质。可解释性问题影响了人们对深度学习系统的信任。它还与许多伦理问题有关&#xff0c;例如算法歧视。此外&#xff0c;…