八股文死记硬背打脸记

  •  背景

        我们都知道,再编程领域数据结构的重要性,常见的数据结构包括 List、Set、Map、Queue、Tree、Graph、Stack 等,其中 List、Set、Map、Queue 可以从广义上统称为集合类数据结构。而Java也提供了很多的集合数据结构以供开发者开箱即用,其中ArrayList和LinkedList区别的问题早已成为烂大街的八股文面试题其中之一                

        作为一名Javaer,不论是日常开发还是作为面试官,都不得不承认八股文在如今的江湖中占有举足轻重的地位。"面试造火箭,入职拧螺丝"  这是许多面试同学吐槽最多的一句话,但就我个人而言,我认为背八股文对于大多数开发同学而言仍然是一个不错的提升技术途径(特别是对于一些小公司接触不到复杂业务的开发同学)

        凡事都有一个但是,此八股文非彼八股文,不能像读书时背课文似的死记硬背,最好结合自己开发中的实践,要学会有自己的理解,否则有时就会闹笑话,此处引申一则自己的亲身面试经历

       A同学:"ArrayList的底层实现是数组,而LinkedList是双向列表"

       我内心:"马上及格"

       A同学:"所以ArrayList适合查询频繁的业务场景而LinkedList适合增删频繁的业务场景"

       我内心 :"及格,但有无自己的理解呢"        

       我 :"你平时开发中是怎么使用LinkedList的?"

       A同学:"就像我刚才讲的,有频繁增删的场景我便使用LinkedList来存储数据,因为它的效率更高"

       我 :"你确定吗?"

       A同学:"我确定(这面试官行不行,这八股文必背的还能有错?)"

  • 实践

       检验真理的唯一标准就是开整

    //LinkedList访问private static void linkedListGet(int elementCount, int loopCount) {List<Integer> list = IntStream.rangeClosed(1, elementCount).boxed().collect(Collectors.toCollection(LinkedList::new));IntStream.rangeClosed(1, loopCount).forEach(i -> list.get(ThreadLocalRandom.current().nextInt(elementCount)));}//ArrayList访问private static void arrayListGet(int elementCount, int loopCount) {List<Integer> list = IntStream.rangeClosed(1, elementCount).boxed().collect(Collectors.toCollection(ArrayList::new));IntStream.rangeClosed(1, loopCount).forEach(i -> list.get(ThreadLocalRandom.current().nextInt(elementCount)));}//LinkedList插入private static void linkedListAdd(int elementCount, int loopCount) {List<Integer> list = IntStream.rangeClosed(1, elementCount).boxed().collect(Collectors.toCollection(LinkedList::new));IntStream.rangeClosed(1, loopCount).forEach(i -> list.add(ThreadLocalRandom.current().nextInt(elementCount),1));}//ArrayList插入private static void arrayListAdd(int elementCount, int loopCount) {List<Integer> list = IntStream.rangeClosed(1, elementCount).boxed().collect(Collectors.toCollection(ArrayList::new));IntStream.rangeClosed(1, loopCount).forEach(i -> list.add(ThreadLocalRandom.current().nextInt(elementCount),1));}
        //元素个数10Wint elementCount = 100000;//循环次数10Wint loopCount = 100000;StopWatch getWatch = new StopWatch();getWatch.start("linkedListGet");linkedListGet(elementCount, loopCount);getWatch.stop();getWatch.start("arrayListGet");arrayListGet(elementCount, loopCount);getWatch.stop();System.out.println(getWatch.prettyPrint());StopWatch addWatch = new StopWatch();addWatch.start("linkedListAdd");linkedListAdd(elementCount, loopCount);addWatch.stop();addWatch.start("arrayListAdd");arrayListAdd(elementCount, loopCount);addWatch.stop();System.out.println(addWatch.prettyPrint());
StopWatch '': running time = 5798625399 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
5789125500  100%   linkedListGet
009499899  00%   arrayListGetStopWatch '': running time = 27658489400 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
26271657500  95%   linkedListAdd
1386831900  05%   arrayListAdd

        可以看到 LinkedList 无论是查询还是插入, 完败

  • 总结

        通过查看LinkedList 源码发现,插入操作的时间复杂度是 O(1) 的前提是,已经获得要插入节点的指针。但在实现的时候,我们需要先遍历获取到该节点的 Node,然后再执行插入操作,前者也是有开销的,不可能只考虑插入操作本身的代价

        最后以一个讽刺的图作为结尾 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

IC芯片测试:如何对芯片静态功耗进行测试?

静态功耗也叫静态电流&#xff0c;是指芯片在静止状态下的电流或者是指芯片在不受外界因素影响下自身所消耗的电流。静态功耗对于芯片来说是衡量一款芯片的功耗与效率非常重要的指标。 传统手动测试静态功耗只需在芯片的输入端串上一台万用表&#xff0c;然后对芯片各个端口添加…

html学习综合案例1

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>个人简介</title> </head> <body>…

python每日一题(模拟用户登录验证)

1、题目 预先设定正确用户名与密码&#xff0c;用来验证用户是否登录成功。 第一次&#xff1a; ① 输入用户名与密码&#xff0c;如果用户名与密码正确&#xff0c;则提示登录成功&#xff1b; ② 如果用户名错误&#xff08;不管密码是否正确&#xff09;&#xff0c;则需要重…

day02_环境_基础

今日内容 邱世举 - 邱哥 零、复习昨日 一、上课软件 二、GPT 三、Java是个啥 四、安装JDK 五、HelloWorld程序[重点] 六、编码规范 附录: 单词 零、 复习昨日 一、常用软件 看视频 PotPlayer 轻便,无级变速 内网通 局域网,聊天办公,传资料 notepad notepad 升级版记事本,看代码…

计算机网络常见问题

1.谈一谈对OSI七层模型和TCP/IP四层模型的理解&#xff1f; 1.1.为什么要分层&#xff1f; 在计算机中网络是个复杂的系统&#xff0c;不同的网络与网络之间由于协议&#xff0c;设备&#xff0c;软件等各种原因在协调和通讯时容易产生各种各样的问题。例如&#xff1a;各物流…

技术分享| anyRTC音视频混流技术解析

一&#xff0c;简介 在视频通讯场景中&#xff0c;比如会议、直播等经常能看到图像合成的场景。图像合成是在指定的一块画面区域&#xff0c;在这个区域内&#xff0c;按画面的位置(坐标)布局&#xff0c;将区域中的每个视频画面的像素混合计算成一个像素&#xff08;RGB&…

【Linux基础】第29讲 Linux用户和用户组权限控制命令(一)

1 useradd 添加新用户 &#xff08;注意&#xff1a;当前用户必须有添加用户的权限&#xff09; 1&#xff09;基本语法 useradd 用户名&#xff08;功能描述&#xff1a;添加新用户&#xff09; 2&#xff09;案例 rootsue-virtual-machine:/usr/local# useradd hadoop 2 …

Python线程和进程

1、深度解析Python线程和进程 一篇文章带你深度解析Python线程和进程 - 知乎使用Python中的线程模块&#xff0c;能够同时运行程序的不同部分&#xff0c;并简化设计。如果你已经入门Python&#xff0c;并且想用线程来提升程序运行速度的话&#xff0c;希望这篇教程会对你有所帮…

安装Anaconda与pytorch,在IDEA中配置环境进行编程

1.官网下载与自己python版本匹配的Anaconda(注意&#xff0c;要想成功安装pytorch&#xff0c;python版本也要对应pytorch的相关版本) Anaconda官网最新版本 与自己python版本不否请查找自己版本anaconda版本对应 清华大学镜像下载 2.安装时勾选添加环境变量或者手动添加&am…

Unity丨自动巡航丨自动寻路丨NPC丨

文章目录 概要功能展示技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 本文功能是制作一个简单的自动巡逻的NPC&#xff0c;随机自动寻路。 功能展示 技术细节 using UnityEngine;public class NPCController : MonoBehaviour {public float moveSpeed 5.0f; // …

【验证码逆向专栏】螺丝帽人机验证逆向分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

Springboot 集成 Ehcache操作数据库显示SQL语句设置

Springboot 集成 Ehcache操作数据库显示SQL语句设置 2023-09-13 23:33:35.030 INFO 6124 --- [ task-1] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2023-09-13 23:33:35.124 INFO 6124 --- [ …

几个国内可用的强大的GPT工具

前言&#xff1a; 人工智能发布至今&#xff0c;过去了九个多月&#xff0c;已经成为了我们不管是工作还是生活中一个重要的辅助工具&#xff0c;大大提升了效率&#xff0c;作为一个人工智能的自然语言处理工具&#xff0c;它给各大行业的提供了一个巨大的生产工具&#xff0c…

2023华为杯研究生数学建模C题分析

完整的分析查看文末名片获取&#xff01; 问题一 在每个评审阶段&#xff0c;作品通常都是随机分发的&#xff0c;每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比性&#xff0c;不同专家评审的作品集合之间应有一些交集。但有的交集大了&#xff0c;则…

图像处理软件Photoshop 2024 mac新增功能

Photoshop 2024 mac是一款图像处理软件的最新版本。ps2024提供了丰富的功能和工具&#xff0c;使用户能够对照片、插图、图形等进行精确的编辑和设计。 Photoshop 2024 mac软件特点 快速性能&#xff1a;Photoshop 2024 提供了更快的渲染速度和更高效的处理能力&#xff0c;让用…

将本地前端工程中的npm依赖上传到Nexus

【问题背景】 用Nexus搭建了内网的依赖仓库&#xff0c;需要将前端工程中node_modules中的依赖上传到Nexus上&#xff0c;但是node_modules中的依赖已经是解压后的状态&#xff0c;如果直接机械地将其简单地打包上传到Nexus&#xff0c;那么无法通过npm install下载使用。故有…

人人皆知的人工智能真的稳定吗?它的发展前景如何?

在当今社会&#xff0c;每个人都知道并且使用过人工智能产品&#xff0c;那么大家习以为常的人工智能真的稳定吗&#xff1f;它的发展前景又会是如何呢&#xff1f; 人工智能就是基于计算机技术理解和分析人类智能的本质&#xff0c;通过智能分析来模仿和学习人类动作用来服务…

[C++随笔录] vector模拟实现

vector模拟实现 基本结构天选之子构造拷贝构造析构operator 空间reserveresizesize && capacity 增insertpush_back 删erasepop_back 查 && 改swapoperator[] 源码 基本结构 // 可以是不同类型, 用类模板 template <class T> class vector { public:// 源…

【DLL修复工具下载】一键修复电脑丢失d3dcompiler_47.dll问题方法

在我们使用电脑的过程中&#xff0c;有时候会遇到一些错误提示&#xff0c;其中“缺失 d3dcompiler_47.dll”就是比较常见的一种。那么&#xff0c;d3dcompiler_47.dll 到底是什么呢&#xff1f;为什么会出现缺失的情况&#xff1f;丢失 d3dcompiler_47.dll 又会对电脑产生什么…

远程控制桌面软件是否支持远程防护墙配置

远程控制桌面软件是一种便捷的工具&#xff0c;它能够帮助用户在远程访问和操作计算机桌面。然而&#xff0c;远程控制软件是否支持远程防火墙配置这个问题的答案并不是简单的是或否。下面将从软件设计的角度和实际使用情况的角度来解释这个问题。 首先&#xff0c;让我们了解一…