java集合:Arraylist与linkedlist的区别

Java面试:ArrayList LinkedList区别是什么?谈谈你对ArrayListLinkedList的理解 ArrayList是基于动态数组实现的 List,其中元素的索引是基于顺序的。它提供了按索引访问元素的快速方式,适合需要频繁读取元素的场景。ArrayList LinkedList 各有优缺点,选择合适的集合类将直接影响程序的性能可维护性。了解它们的特性及适用场景可以帮助开发者更有效地管理数据结构,从而优化应用程序的性能。希望本篇博客能够帮助你更好地理解 ArrayList LinkedList,并在未来的项目中作出明智的选择! 阅读详情

1、Arraylist与linkedlist的区别

arraylist和linkedlist的区别是:数据结构不同,效率不同,自由性不同,主要控件开销不同。

(1)、数据结构不同

ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。

(2)、效率不同

当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找,重新排序。

@Test
    public void test04(){//修改
        ArrayList list=new ArrayList();
        for (int i=0;i<10;i++){
            list.add("李昊哲"+i);
        }
        System.out.println(list);
        list.set(6,"张三");
        System.out.println(list);
    }
    @Test
    public void test08(){
      LinkedList list=new LinkedList<>();
        for (int i=0;i<10;i++){
            list.add("李昊哲"+i);
        }
        System.out.println(list);
        list.set(6,"张三");
        System.out.println(list);
    }
[李昊哲0, 李昊哲1, 李昊哲2, 李昊哲3, 李昊哲4, 李昊哲5, 李昊哲6, 李昊哲7, 李昊哲8, 李昊哲9]
[李昊哲0, 李昊哲1, 李昊哲2, 李昊哲3, 李昊哲4, 李昊哲5, 张三, 李昊哲7, 李昊哲8, 李昊哲9]

当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。

@Test
    public void test06() {//插入
        ArrayList list = new ArrayList();
        for (int i = 0; i < 10; i++) {
            list.add("李昊哲" + i);
        }
        System.out.println(list);
        list.add("张三");
        System.out.println(list);
    }
    @Test
    public void test07(){
        LinkedList list=new LinkedList<>();
        for (int i = 0; i < 10; i++) {
            list.add("李昊哲" + i);
        }
        System.out.println(list);
        list.add(7,"张三");
        System.out.println(list);
    }
[李昊哲0, 李昊哲1, 李昊哲2, 李昊哲3, 李昊哲4, 李昊哲5, 李昊哲6, 李昊哲7, 李昊哲8, 李昊哲9]
[李昊哲0, 李昊哲1, 李昊哲2, 李昊哲3, 李昊哲4, 李昊哲5, 李昊哲6, 张三, 李昊哲7, 李昊哲8, 李昊哲9]

(3)自由性不同

ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。

(4)主要控件开销不同

ArrayList主要控件开销在于需要在lList列表预留一定空间;而LinkList主要控件开销在于需要存储节点信息以及节点指针

 

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针

对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

ArrayList:内部使用数组的形式实现了存储,实现了RandomAccess接口,利用数组的下标进行元素的访问,因此对元素的随机访问速度非常快。因为是数组,所以ArrayList在初始化的时候,有初始大小10,插入新元素的时候,会判断是否需要扩容,扩容的步长是0.5倍原容量,扩容方式是利用数组的复制,因此有一定的开销;

另外,ArrayList在进行元素插入的时候,需要移动插入位置之后的所有元素,位置越靠前,需要位移的元素越多,开销越大,相反,插入位置越靠后的话,开销就越小了,如果在最后面进行插入,那就不需要进行位移

LinkedList:内部使用双向链表的结构实现存储,LinkedList有一个内部类作为存放元素的单元,里面有三个属性,用来存放元素本身以及前后2个单元的引用,另外LinkedList内部还有一个header属性,用来标识起始位置,LinkedList的第一个单元和最后一个单元都会指向header,因此形成了一个双向的链表结构。

LinkedList是采用双向链表实现的。所以它也具有链表的特点,每一个元素(结点)的地址不连续,通过引用找到当前节点的上一个节点和下一个节点,即插入和删除效率较高,只需要常数时间,而get和set则较为低效。

LinkedList的方法和使用和ArrayList大致相同,由于LinkedList是链表实现的,所以额外提供了在头部和尾部添加/删除元素的方法,也没有ArrayList扩容的问题了。另外,ArrayList和LinkedList都可以实现栈、队列等数据结构,但LinkedList本身实现了队列的接口,所以更推荐用LinkedList来实现队列和栈。

 

ArrayListLinkedList区别 ArrayListLinkedList的异同点以及使用区别 阅读详情

相关推荐

别再纠结高边低边了!用TI BQ76952设计两轮车BMS,手把手教你选对架构(附电路图)

本文深度解析基于TI BQ76952芯片的电动两轮车BMS设计策略,涵盖高边/低边驱动选择、四种基础架构的电流路径分析及选型决策矩阵。通过实战案例分享,帮助工程师优化BMS架构,提升系统可靠性成本效益,特别适合电摩共享单车应用场景。

weixin_42665255的博客 473

java集合框架05——ArrayListLinkedList区别

前面已经学习完了List部分的源码,主要是ArrayListLinkedList两部分内容,这一节主要总结下List部分的内容。 List概括 先来回顾一下List在Collection中的的框架图: 从图中我们可以看出: 1. List是一个接口,它继承Collection接口,代表有序的队列。 2. AbstractList是一个抽象类,它继承AbstractColle

11万+

JavaArrayList LinkedList区别

ArrayList LinkedList 都是Java中常见的集合类,它们用于存储操作数据

JustinMars的博客 618

ArrayListlinkedList区别

ArrayListLinkedList区别是什么

GeGe&YoYo的博客 8061

Java集合Arraylist LinkedList 区别

一般大家都知道ArrayListLinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous) 2.对于随机访问getset,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增...

畅志聪的专栏 306

java linkedlistarraylist_java集合ArrayList LinkedList区别

从线程安全的方面来说,这两个都不能线程安全的;从数据结构来说,ArrayList 的底层使用的是object数组,而LinkedList底层是双向链表数据结构。由于ArrayList是底层是数组,所以可以快速随机访问,通过坐标就可以快速定位,而LinkedList 则不可以。在添加删除方面,ArrayList 是数组结构,如果添加/删除的是第i个数据,那么数组中的i之后的所有数据都会向前后移动。...

weixin_29099729的博客 146

Java集合篇:ArrayListLinkedList、HashMap、HashTable、HashSet的区别

一、ArrayList LinkedList: 1、区别: (1)ArrayList是基于动态数组的数据结构,查询快,增删慢,线程不安全。 LinkedList是基于链表的数据结构,查询慢,增删快。线程不安全。 (2)对ArrayListLinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。 (3)对ArrayList而言,主要开销是在内部数组中增加一项,指向所添加的元素,偶...

u013293793的专栏 1358

java集合ArrayList LinkedList区别

从线程安全的方面来说,这两个都不能线程安全的; 从数据结构来说,ArrayList 的底层使用的是object数组,而LinkedList底层是双向链表数据结构。 由于ArrayList是底层是数组,所以可以快速随机访问,通过坐标就可以快速定位,而LinkedList 则不可以。 在添加删除方面,ArrayList 是数组结构,如果添加/删除的是第i个数据,那么数组中的i之后的所有数据...

weixin_30861459的博客 176

Java集合ArrayListLinkedList区别、原理、性能场景

本文深入对比Java集合ArrayListLinkedList的核心差异。ArrayList基于动态数组实现,查询快(O(1))但中间增删慢;LinkedList基于双向链表实现,中间增删快(O(1))但查询慢(O(n))。数组内存连续无冗余,链表每个节点额外存储指针地址。开发选型应遵循"查多删少用数组,删多查少用链表"原则,90%场景优先使用ArrayList,仅在频繁中间增删或实现队列结构时选用LinkedList。二者均非线程安全,并发场景需使用线程安全替代方案。

xiaoye220911的博客 693

Java集合ArrayListLinkedList区别

ArrayListLinkedList的大致区别如下: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。  2.对于随机访问getset,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。  3.对于新增删除操作addremove,LinedList比较占优势,因为ArrayList要移动数据。  Arra...

五山口老法师 478

Java集合系列(二):ArrayListLinkedList、Vector的使用方法及区别

本篇博客主要讲解List接口的三个实现类ArrayListLinkedList、Vector的使用方法以及三者之间的区别。注意:本文中代码使用的JDK版本为1.8.0_191。

cxytony的博客 776

Java集合容器详解:ArrayListLinkedListHashMap、HashTable及其区别

Java集合框架是Java提供的一组用于存储操作数据的类接口。其中,ArrayListLinkedListHashMap、HashTable是常用的集合容器,它们在不同的场景中具有重要性广泛应用。

devops 1724

创建list集合_Java List集合ArrayListLinkedList类的用法及区别

List 是一个有序、可重复的集合集合中每个元素都有其对应的顺序索引。List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List 集合默认按元素的添加顺序设置元素的索引,第一个添加到 List 集合中的元素的索引为 0,第二个为 1,依此类推。List 实现了 Collection 接口,它主要有两个常用的实现类:ArrayList LinkedList 类。...

weixin_39732506的博客 749

Java常用的集合容器:HashTable、HashSet、HashMap、ArrayListLinkedList区别

Java的开发中,我们经常用到HashTable、HashSet、HashMap、ArrayListLinkedList这些集合容器,但是很少关心他们之间的区别,那么它们之间究竟有什么区别呢?其实网上这方面的文章太多了,我这里也就是记录一下,以备后续自己可查。 1、HashTable 是线程安全的,且是线程同步的,在实现线程同步的时候是不需要手动来实现线程同步的,因此相对效率低。 添加的顺序保存的顺序是不一致的。 添加的值中是不允许有null值的存在。 底层:HashTable类继承自Dic

老赵的地盘 555

Java 集合框架面试题:ArrayList LinkedList 的核心区别

例如在节点 A 节点 B 之间插入节点 C 时,只需将 A 的 next 指针指向 C,C 的 prev 指针指向 A,C 的 next 指针指向 B,B 的 prev 指针指向 C,整个过程无需移动其他元素。而 LinkedList 则适用于频繁在头部或中间位置进行增删,且随机访问需求较少的场景,例如实现队列(Queue)、栈(Stack)、双向队列(Deque)等数据结构(Java 中的 LinkedList 同时实现了 Deque 接口,提供了丰富的首尾操作方法)。

2509_93051135的博客 418

Java集合框架:ArrayListLinkedList区别解析

两者的核心区别在于底层实现:ArrayList底层是动态数组,基于索引访问,查询速度快(时间复杂度O(1)),但插入、删除元素时需要移动数组元素,效率较低(O(n)),适合查询频繁、增删少的场景。LinkedList底层是双向链表,存储元素时记录前后节点地址,插入、删除元素只需修改节点指向,效率高(O(1)),但查询时需要遍历链表,速度较慢(O(n)),适合增删频繁、查询少的场景。ArrayList占用内存较少,LinkedList因存储节点地址,内存消耗更大。

mycase6的博客 386

Java集合框架:VectorArrayListLinkedList区别

ArrayListLinkedList区别 底层实现: ArrayList 基于 动态数组实现 LinkedList 基于 链表结构实现 接口实现: 两种集合都实现了Serializable,Cloneable,List接口,支持 序列化操作,克隆操作 ArrayList接口实现了标记接口RandomAccess,支持快速随机访问 LinkedList接口还实现了Deque接...

m0_37567491的博客 198

跨平台也要跑得像原生一样顺:SAP GUI for Java 的安装、配置、运维自动化实战

摘要:SAP GUI for Java 作为跨平台客户端解决方案,在 S/4HANA 时代仍发挥关键作用,特别适用于 macOS/Linux 环境下的 ABAP 开发系统运维。其主要优势包括:平台无关性(支持 Windows/macOS/Linux/UNIX)、 Windows 版本一致的交互体验、对核心事务码(如 ST22/SM21)的完整支持。版本管理需注意 7.80 已停止支持,建议升级至 8.10。安装支持原生包通用 JAR 两种方式,推荐团队标准化版本连接配置(通过 SAP UI Land

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 595

YD∕T3751-2020设计技术规范

YD∕T3751-2020设计技术规范

上一篇: Java面向对象:封装、构造方法、继承、抽象的简单介绍
下一篇: Java:Date日期类简单应用
si_pei_liang
博客等级 码龄5年 2粉丝 10原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值