ArrayList类和LinkedList类对比分析

Java 集合框架应用对比:ArrayList vs LinkedList 在Truck类中的3种实现与性能分析 本文深入对比了Java集合框架中ArrayList与LinkedList在Truck类中的三种实现与性能优化实践。通过家电物流管理系统中的卡车装载计算场景,详细分析了两种集合的优缺点及适用场景,并提供了性能基准测试数据与工程实践建议,帮助开发者做出更优的技术选型。 阅读详情

 测试类

package com.MyLinkedList.test;

import com.ArrayList.ArrayList;
import com.List.List;
import com.MyLinkedList.fulei.LinkedList;

import java.util.Collection;
import java.util.Random;

import static java.lang.System.currentTimeMillis;

public class TestList {

    private static Collection<? extends E> header;

    public static void main(String[] args) {
        testList(new ArrayList<String>());
        testList(new LinkedList<String>());
    }

    private static void testList(ArrayList<String> strings) {
    }

    private static void testList(LinkedList<String> strings) {
    }

    private static void print(String str,long lastTime) {
        System.out.println(str+(System.currentTimeMillis() - lastTime) +"ms" );
    }

    private static int addTest(List<String> list) {
        long lastTime = currentTimeMillis();
        int index = 0;
        for (int i = 10000; i < 20000; i++) {
            list.add("" + i);
            index++;
        }

        print("新增耗时:",lastTime);
        lastTime = System.currentTimeMillis();
        for (int i = 30000; i < 39999; i++){
            list.add(list.size() - 1,""+i);
            index++;
        }
        print("插入到尾耗时:",lastTime);
        lastTime = System.currentTimeMillis();
        for (int i = 20000; i < 29999; i++){
            list.add(list.size() / 2,""+i);
            index++;
        }

        print("插入到中间耗时:",lastTime);
        lastTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++){
            list.add(0,""+i);
            index++;
        }

        print("插入到头耗时:",lastTime);
        return index;

    }

    public static void removeByObjectTest(List<String> list,int index) {
        long lastTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++){
            list.remove(""+--index);
        }

        //移除30000~39999
        print("按照对象从尾移除耗时:",lastTime);
        lastTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++){
            list.remove(""+i);
            index--;
        }

        //移除0~9999
        print("按照对象从头移除耗时:",lastTime);
        int first = Integer.valueOf(list.get(0));
        int last = Integer.valueOf(list.get(list.size()-1));
        int middle = (last - first) / 2 + first;
        boolean flag = true;
        int goLeft = middle;
        int goRight = middle+1;
        lastTime = System.currentTimeMillis();
        for (int i = 0; i <= 10000; i++){
            if (flag){
                flag = false;
                list.remove(""+goLeft--);
            }
            else {
                flag = true;
                list.remove(""+goRight++);
            }
            index--;
        }

        //移除10000~19999之间的10000个数
        print("按照对象从中间移除耗时:",lastTime);

    }

    public static void removeByIndexTest(List<String> list,int index) {
        long lastTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++){
            list.remove(--index);
        }

        print("按照index从最后移除耗时:",lastTime);
        lastTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i ++){
            list.remove(list.size() / 2);
            index--;
        }

        print("按照index从中间移除耗时:",lastTime);
        lastTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++){
            index--;
            list.remove(0);
        }

        print("按照index从头移除耗时:",lastTime);
    }

}

运行结果

 class.java.util.ArrayList

新增耗时:9ms

插入到尾耗时:4ms

插入到中间耗时:17ms

插入到头耗时:44ms

按照index从最后移除耗时:1ms

按照index从中间移除耗时:16ms

按照index从头移除耗时:20ms

新增耗时:1ms

插入到尾耗时:2ms

插入到中间耗时:18ms

插入到头耗时:44ms

按照对象从尾移除耗时:1099ms

按照对象从头移除耗时:172ms

按照对象从中间移除耗时:105ms

class.java.util.LinkedList

新增耗时:2ms

插入到尾耗时:3ms

插入到中间耗时:873ms

插入到头耗时:2ms

按照index从最后移除耗时:1ms

按照index从中间移除耗时:921ms

按照index从头移除耗时:0ms

新增耗时:1ms

插入到尾耗时:1ms

插入到中间耗时:811ms

插入到头耗时:1ms

按照对象从尾移除耗时:1994ms

按照对象从头移除耗时:225ms

按照对象从中间移除耗时:109ms

如果仅仅只是需要进行单纯的新增操作,无论ArrayList和LinkedList都适合,但是如果需要对列表两端进行新增操作,那么LinkedList比ArrayList更有效率的多。

如果要对列表的中间部分按照索引进行新增或移除,那么相对而言,ArrayList的效率要高。

不管是ArrayList还是LinkedLisst都要尽量避免直接按照对象进行移除。

测试类

package com.MyLinkedList.test;

import com.ArrayList.ArrayList;
import com.List.List;
import com.MyLinkedList.fulei.LinkedList;

import java.util.Collection;
import java.util.Random;

import static java.lang.System.currentTimeMillis;

public class TestList {

    public static void testList(List<String> list) {
        System.out.println(list.getClass());
        removeByIndexTest(list,addTest(list));
        list.clear();
        removeByObjectTest(list,addTest(list));
    }

    public static void testTest(List<String> list) {
        System.out.println(list.getClass());
        addTest(list);
        getTest(list);
    }

    public static void getTest(List<String> list) {
        Random ran = new Random();
        long lastTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++){
            list.get(ran.nextInt(list.size() - 1));
        }

        print("随机访问:",lastTime);
    }
}

运行结果

class java.util.ArrayList

新增耗时:10ms

插入到尾耗时:4ms

插入到中间耗时:20ms

插入到头耗时:51ms

随机访问:9ms

class java.util.LinkedList

新增耗时:3ms

插入到尾耗时:4ms

插入到中间耗时:837ms

插入到头耗时:2ms

随机访问:6978ms

 随机访问的差距十分明显,由此,可以得出结论:ArrayList的随机访问的效率要高于LinkedList。

渗透测试之哥斯拉实战 可以直接在这里使用meterpreter命令进行对服务端的控制。选择目标 - 添加,配置连接信息,之后测试连接成功!php的shell功能如图。先要进行数据库的配置信息。可以直接在这里打包全站。 阅读详情

相关推荐

ptrade从零开始学习量化交易第166期【ptrade量化策略研究参考--三个因子挖掘思路】

三个因子挖掘思路

GJ57017_wx的博客 1249

ArrayList和LinkedList的区别

从实现看: LinkedList底层实现是双链表 ArrayList底层实现是动态数组 从扩容机制看: LinkedList不存在扩容 的说法,因为是链表结构。 ArrayList底层是动态数组存在扩容说法,默认的数组大小是10,在检测是否需要扩容后,如果扩容,会扩容为原来的1.5倍大小。原理就是把老数组的元素存储到新数组里面 从优点看: ArrayList的查找性能好,因为底层是数组,适用于查找元素。 LinkedList底层是双链表,对于插入或者删除元素来说,操作方便,性能高。 从缺点看:

编程进化论 978

【Zephyr 系列 29】低功耗调试指南:电流测量、系统睡眠与功耗分析

Zephyr低功耗调试指南(150字摘要) 针对物联网设备续航需求,本文解析Zephyr低功耗调试方法:1️⃣ 机制:启用PM子系统和tickless idle,配置睡眠策略;2️⃣ 测量:推荐功耗分析仪捕捉μA级电流波动;3️⃣ 优化:管理唤醒源(如GPIO/RTC)、调整BLE广播/连接参数,挂起闲置外设;4️⃣ 分析:建立功耗文档,对比不同模式电流(如待机0.6mA vs广播3.2mA)。强调低功耗需系统性设计,初期即需纳入测试流程。下期将探讨Zephyr OTA升级实现。

hemoparrot的专栏 1180

ArrayList和LinkedList简单分析

ArrayList和LinkedList 1.数据结构 ArrayList底层数据结构是Object[],初始长度为10 LinkedList在JDK1.7 时是循环链表,在JDK1.8时是双向链表,下图为JDK1.8时的LinkedList源码 2.插入和删除 2.1 ArrayList添加、删除、扩容 ArrayList在任意位置时的插入操作是要经过元素的拷贝的,此时的时间复杂度为O(n-i)。大量的数据移动会导致系统性能的下降,插入的位置越靠前系统的开销越大。 ArrayList在尾部添加数据

qq_29529381的博客 325

从按键开机到I2C隔离:手把手拆解一个智能硬件项目里的MOS管实战配置

本文详细解析了智能硬件项目中MOS管的实战配置,从按键开机电路到I2C总线隔离,全面覆盖电源管理和信号隔离的关键技术。通过PMOS+NMOS组合方案实现可靠的开机功能,并采用双NMOS方案优化I2C通信隔离,提升系统稳定性和信号质量。

weixin_28691741的博客 326

新手必看:如何用R/qtl快速完成QTL定位分析(附实战代码)

本文为新手提供了使用R/qtl进行QTL定位分析的完整实战指南。内容涵盖从环境搭建、数据准备与清洗,到核心分析流程(包括遗传图谱计算、单QTL扫描、置换检验确定阈值)以及进阶结果可视化的全步骤。通过清晰的代码示例,帮助读者快速掌握这一数量遗传学关键分析技术,实现从数据到QTL峰值的完整分析闭环。

y7z8a的博客 501

ArrayList和LinkedList区别?看完秒懂~

工作中,大家是不是经常分不清楚,什么时候用ArrayList,什么时候用LinkedList?

m0_68103666的博客 3万+

2023年5月青少年软件编程Python等级考试四级真题(含答案和解析)

电子学会,2023年5月,青少年软件编程,Python等级考试,四级真题(含答案和解析)

m0_37554648的博客 905

linkedlist和arraylist的区别是什么

主要区别:ArrayList是Array(动态数组)的数据结构,而LinkedList是Link(链表)的数据结构。随机访问(get和set)时,ArrayList优于LinkedList;新增和删除操作,LinedList比较占优势。 LinkedeList和ArrayList的区别 1、数据结构不同 ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的...

thunder-1 2098

【异常】OpenClaw 飞书端 OpenClaw: access not configured. Pairing code: [] Ask the bot owner to approve with

摘要: OpenClaw飞书机器人交互中出现的access not configured报错,是因用户或组织未配置访问权限触发的拦截提示。报错包含组织单元ID和配对校验码,需管理员审批开通权限。普通用户需提交完整报错信息给管理员处理;管理员可通过执行标准化命令单次审批,或批量配置组织白名单优化权限管理。建议提前梳理权限范围、及时同步组织架构变更,并定期审计权限列表以确保安全合规。

奶爸的编程之路,也就一周冷个三天 371

arrayList 和 linkedList 各自的实现和区别

ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下: 一、同步性 ArrayList,LinkedList是不同步的,而Vestor是同步的。所以如果不要求线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费的开销。但在多线程的情况下,有时候就不得不使用Vector了。当然,也...

weixin_41325595的博客 421

基于容积卡尔曼滤波的弹目相对姿态估计算法及其在导弹末端制导中的应用

本文针对导弹末端制导中的强非线性姿态估计问题,提出了一种基于容积卡尔曼滤波(CKF)的弹目相对姿态估计算法。通过建立包含视线角、角速率和相对距离的6维状态模型,利用三阶球面-相径容积准则精确逼近非线性状态分布,避免了传统EKF的线性化误差。在MATLAB/Simulink仿真中,CKF表现出比EKF更高的视线角速率估计精度和更快的收敛速度,最终显著减小了脱靶量,验证了其在提升导弹末端制导精度方面的有效性。该算法计算复杂度适中,适合工程实现,为高精度非线性姿态估计提供了新思路。

AI的内部世界的博客 105

AarryList和LinkedList

ArrayList、Vector和LinkedList。其中Vector还有一个Stack子类,这个Stack子类仅在Vectot父类的基础上增加了5个方法,这5个方法就将一个Vector扩展成了Stack。本质上,Stack依然是一个Vector,它只是比Vector多了5个方法 public class Stack<E> extends Vector<E> ...

kay三石 348

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ArrayList,LinkedList和Vector三者的异同

java学习笔记 相同:三个类都实现了List接口,存储数据的特点相同,存储有序的,可重复的数据 不同: ArrayList:作为List接口的主要实现类;线程不安全,效率高,底层使用Object[] elementData存储 LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储 Vector:作为List接口的古老实现类线程安全的,效率低;底层使用Object[] elementData存储 ArrayList源码分析 jdk1.7和jdk1.8稍有不

weixin_42371679的博客 221

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【Java】集合系列08(List总结LinkedList, ArrayList等使用场景和性能分析)

List内容包括: 1、List概括 2、List使用场景 3、LinkedList和ArrayList性能差异分析 4、Vector和ArrayList比较 1、List概括 先回顾一下List的框架图: (01)List 是一个接口,它继承于Collection的接口。它代表着有序的队列。 (02)AbstractList 是一个抽象类,它继承于AbstractC...

hackerlee 372

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java中ArrayList和LinkedList的区别

首先来看ArrayList和LinkedList的集成类和接口的区别。 // lang java public class ArrayList<E> extends AbstractList<E> implements List<...

测试0901-1 117

Java学习之路(三十九)| 集合(二)—— ArrayList类、Vector类、LinkedList类

ArrayList类、Vector类、LinkedList类基本使用。

weixin_45904051的博客 143

描述一下ArrayList和LinkedList各自实现和区别

转载自https://www.cnblogs.com/Alan-Jones/p/6426994.html,感谢整理与分享! ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下: 一、同步性        ArrayList,LinkedList是不同步的,而Vestor是同步的。所以如果不要求线程安全的话,可以...

黎明前的准备 3841

ArrayList与LinkedList的区别是什么?

综上所述,ArrayList和LinkedList是Java集合框架中实现List接口的两种常见类。它们各自具有独特的数据结构和特点,适用于不同的应用场景。ArrayList基于数组实现,适用于需要频繁进行随机访问的场景;而LinkedList基于链表实现,适用于需要频繁进行插入和删除操作的场景。在选择使用哪个类时,需要根据具体的应用场景和需求进行权衡和选择。

Dingdangr的博客 1815

ArrayList和LinkedList 以及 Hashtable和HashMap的区别

ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦 LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦 要丛第一个索引开始 Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类

King-Blog 552

【JAVA学习笔记】53 - 集合-List类及其子类Collection、ArrayList、LinkedList类、Vector类

本章主要讲了集合的框架和他的子类List和其子类Collection、ArrayList、LinkedList,重要的是阅读源码尽力去理解JAVA开发者的思路和算法

qq_41891655的博客 391

ArrayList和LinkedList HashMap和Hashtable的区别的区别

ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦 LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦 要丛第一个索引开始 Hashtable和HashMap类有三个重要的不同之处.第一个不同主要是历史原因.Hashtable是基于陈旧的Dictionary类

youmengdaigu的专栏 535

Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)

http://www.cnblogs.com/skywang12345/p/3308900.html 概要 前面,我们学完了List的全部内容(ArrayList,LinkedList,Vector,Stack)。 Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fa...

weixin_33842328的博客 91

ArrayList,LinkedList,Vector源码分析

【代码】ArrayList,LinkedList,Vector源码分析。

qq_55278081的博客 126

ArrayList和LinkedList对比分析

从实现看: LinkedList底层实现是双链表 ArrayList底层实现是动态数组 从扩容机制看: LinkedList不存在扩容 的说法,因为是链表结构。 ArrayList底层是动态数组存在扩容说法,默认的数组大小是10,在检测是否需要扩容后,如果扩容,会扩容为原来的1.5倍大小。原理就是把老数组的元素存储到新数组里面 从优点看: ArrayList的查找性能好,因为底层是数组,适用于查找元素。 LinkedList底层是双链表,对于插入或者删除元素来说,操作方便,性能高。 从缺点看:

m0_63278874的博客 204
上一篇: 异常处理2
下一篇: 集合与泛型
abbbbbcdCC
博客等级 码龄5年 4粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值