Java中,ArrayList和LinkedList区别区分,简洁

news/2024/12/22 1:16:00/

在Java中,ArrayList和LinkedList都是用来存储和管理数据的类

ArrayList是Java中的一个类,它实现了List接口,是一种基于动态数组实现的集合类
常用成员方法:
   ·构造方法:ArrayList()
   ·成员方法:add、remove、set、get、size
底层原理:
利用空参创建的集合,在底层创建一个默认长度为0的数组
添加第一个元素时,底层会创建一个新的长度为10的数组存满时,会扩容1.5倍
如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准
 

LinkedList是Java集合框架中的一个双向链表实现类,可以用来存储一组有序的元素。LinkedList本身多了很多直接操作首尾元素的特有API
常用成员方法

addFirst、addLast、getFirst、getLast、removeFirst、removeLast
底层原理:

底层数据结构是双链表,查询慢,增删快,但是如果操作的是首尾元素,速度也是极快的。
 

但它们在数据结构、性能和使用场景上有一些区别。

  1. 数据结构:

    ·ArrayList:基于动态数组实现。由于数组的连续存储特性,ArrayList在获取元素时速度较快,时间复杂度为O(1)。但是,在中间插入或删除元素时,由于数组的连续性,可能需要进行元素移动,所以时间复杂度为O(n)。

    ·LinkedList:基于双向链表实现。每个元素都是一个独立的对象,因此访问元素时需要从头节点开始遍历,所以时间复杂度为O(1)。在链表中间插入或删除元素时,只需修改相邻元素的引用,所以时间复杂度也为O(1)。

  2. 性能:

    ·在获取元素时,ArrayList通常比LinkedList更快。

    ·在插入和删除元素时,LinkedList通常比ArrayList更快。

  3. 使用场景:

    ·ArrayList:当你需要频繁地访问元素时,使用ArrayList更合适。例如,获取一个特定的元素或者对元素进行随机访问。

    ·LinkedList:当你需要频繁地在列表的开头或结尾插入或删除元素时,使用LinkedList更合适。例如,在队列中添加或删除元素。

总的来说,选择ArrayList还是LinkedList主要取决于你的使用场景。

如果你需要频繁地访问元素,那么ArrayList可能是更好的选择。

如果你需要频繁地在列表的开头或结尾插入或删除元素,那么LinkedList可能更适合你。


http://www.ppmy.cn/news/1231046.html

相关文章

MyBatis框架——Mybatis操作数据库之简单的insert操作的实现

入门_MyBatis中文网https://mybatis.net.cn/getting-started.html一些配置文件的模板可以从mybatis的官网中找到。 一、MyBatis操作数据库步骤 1、读取MyBatis配置文件mybatis-config.xml。 mybatis-config.xml作为mybatis的全局配置文件,配置MyBatis的运行环境等…

17.Oracle11g的PL/SQL基础

Oracle11g的PL/SQL基础 一、PL/SQL的体系1、什么是PL/SQL2、PL/SQL 的优缺点2.1 PL/SQL的优点2.2 PL/SQL的缺点 二、PL/SQL的语法1、PL/SQL代码结构(块)2、PL/SQL基本语法2.1 变量声明2.2 流程控制语法 三、oracle的动态SQL 一、PL/SQL的体系 1、什么是P…

大厂秋招真题【栈】Bilibili2019秋招-简单表达式求值

文章目录 题目描述与示例题目描述输入描述输出描述示例输入输出 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 给定一个合法的表达式字符串,其中只包含非负整数、加法、减法以及乘法符号(不…

微信小程序配置企业微信的在线客服

配置企业微信后台 代码实现 <button tap"openCustomerServiceChat">打开企业微信客服</button>methods: {openCustomerServiceChat(){wx.openCustomerServiceChat({extInfo: {url: 你刚才的客服地址},corpId: 企业微信的id,showMessageCard: true,});} …

SpringBoot学习笔记-配置MySQL与实现注册登录模块(中)

笔记内容转载自 AcWing 的 SpringBoot 框架课讲义&#xff0c;课程链接&#xff1a;AcWing SpringBoot 框架课。 CONTENTS 1. 配置JWT验证2. 实现验证登录API3. 实现返回信息API4. 实现注册账号API 本节实现用适合前后端分离的 JWT 验证替代传统的 Session 验证方式&#xff0c…

音视频项目—基于FFmpeg和SDL的音视频播放器解析(十五)

介绍 在本系列&#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器&#xff0c;在这个项目&#xff0c;您可以学到音视频解封装&#xff0c;解码&#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话&#xff0c;请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…

算法升级之路(七)-盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 原题链接: 盛最多水的容器 解题思路&…

Wireshark的数据包它来啦!

通过Wireshark工具&#xff0c;可以轻松的看到网卡的数据信息。通过Wireshark显示的数据包内容信息&#xff0c;通常分七栏&#xff0c;介绍一下&#xff1a; 1No.&#xff1a; 数据包编号。 2.Time Time显示时间&#xff0c;以1号数据包发生开始计时。 3.Source Source显示内容…