java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有?

A ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
B 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
C 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
D ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。

懵逼树上懵逼果,懵逼树下你和我

查询
LinkedList查询用的遍历,AyyayList查询用的是数组下标,所以对于查询ArrayList性能高于LinkedList
新增
新增在末尾或者中间就是ArrayList比LinkedList快,如果在最前面就是LinkedList比ArrayList快
测试一下新增在末尾

public static void main(String[] args){int flag = 100000;ArrayList aList = new ArrayList(flag);LinkedList lList = new LinkedList();Long start1 = System.currentTimeMillis();for(int i=0; i<flag;i++)aList.add("a");System.out.println(System.currentTimeMillis() - start1);Long start2 = System.currentTimeMillis();for(int i=0; i<flag;i++)lList.add("a");System.out.println(System.currentTimeMillis() - start2);
}

测试一下新增在中间

public static void main(String[] args){int flag = 10000;ArrayList aList = new ArrayList(flag);LinkedList lList = new LinkedList();Long start1 = System.currentTimeMillis();for(int i=0; i<flag;i++){if(i < flag / 2)aList.add("a");elseaList.add(flag / 2, "a");}System.out.println(System.currentTimeMillis() - start1);Long start2 = System.currentTimeMillis();for(int i=0; i<flag;i++){if(i < flag / 2)lList.add("a");elselList.add(flag / 2, "a");}System.out.println(System.currentTimeMillis() - start2);
}

测试一下新增在开始

public static void main(String[] args){int flag = 10000;ArrayList aList = new ArrayList(flag);LinkedList lList = new LinkedList();Long start1 = System.currentTimeMillis();for(int i=0; i<flag;i++){aList.add(0 ,"a");}System.out.println(System.currentTimeMillis() - start1);Long start2 = System.currentTimeMillis();for(int i=0; i<flag;i++){lList.add(0."add");}System.out.println(System.currentTimeMillis() - start2);
}

修改
修改在末尾或者中间就是ArrayList比LinkedList快,如果在最前面就是LinkedList比ArrayList快
删除
ArrayList比LinkedList快

看完我们的代码解释,很容易理解我们的是正确的

我们在看看别人的解释

A. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。  //正确,这里的所谓动态数组并不是那个“ 有多少元素就申请多少空间 ”的意思,通过查看源码,可以发现,这个动态数组是这样实现的,如果没指定数组大小,则申请默认大小为10的数组,当元素个数增加,数组无法存储时,系统会另个申请一个长度为当前长度1.5倍的数组,然后,把之前的数据拷贝到新建的数组。

- ---------------------------------------------------------------------

B. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。//正确,ArrayList是数组,所以,直接定位到相应位置取元素,LinkedLIst是链表,所以需要从前往后遍历。

-----------------------------------------------------------------------

C. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。//正确,ArrayList的新增和删除就是数组的新增和删除,LinkedList与链表一致。

-------------------------------------------------------------------------

D. ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。//正确,因为ArrayList空间的增长率为1.5倍,所以,最后很可能留下一部分空间是没有用到的,因此,会造成浪费的情况。

答案为A B C D
我是歌谣,有什么不合理之处欢迎之处,一起学习,共同进步。喜欢敲代码,没事刷刷题。

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期科技领域知识)

歌谣带你看java面试题

java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有?相关推荐

  1. Java面试题18 牛客 假定Base b = new Derived();

    Java面试题18 牛客 假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  2. java面试题29 牛客 以下关于集合类ArrayList、LinkedList、HashMap描述

    java面试题29 牛客 以下关于集合类ArrayList.LinkedList.HashMap描述错误的是() A HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或 ...

  3. java面试题28 牛客 下面有关java classloader说法错误的是?

    java面试题28 牛客 下面有关java classloader说法错误的是? A Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension Cl ...

  4. Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持

    Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:(          ) A Java反射主要涉及的类如C ...

  5. Java面试题17 牛客 下面哪个选项正确创建socket连接?

    Java面试题17 牛客 下面哪个选项正确创建socket连接? Socket s = new Socket(8080); Socket s = new Socket("192.168.1. ...

  6. Java面试题16 牛客 以下java程序代码,执行后的结果是()

    Java面试题16 牛客 以下java程序代码,执行后的结果是() 1 2 3 4 5 6 7 8 9 10 public class Test {     public static void ma ...

  7. Java面试题15牛客 以下关于Integer与int的区别错误的是

    Java面试题15牛客 以下关于Integer与int的区别错误的是 A int是java提供的8种原始数据类型之一 B Integer是java为int提供的封装类 C int的默认值为0 D In ...

  8. Java面试题19 牛客下面有关java的引用类型,说法正确的有?

    Java面试题19下面有关java的引用类型,说法正确的有? A:对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中 B:如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可 ...

  9. java面试题11 牛客:如下语句通过算术运算和逻辑运算之后i和 j的结果是

    如下语句通过算术运算和逻辑运算之后i和 j的结果是( ) 1 2 3 4 5 6 int i=0; int j=0; if((++i>0)||(++j>0)) { //打印出i和j的值. ...

最新文章

  1. java类安卓app 简介_android.app.Activity 的介绍
  2. 熟悉 ASP.NET MVC 类
  3. maya python插件_Maya中Python代码插件编译技术视频教程
  4. Comet服务器推送与SignalR
  5. docker运行Linux性能怎么样,Docker容器OSX与Linux的性能差异
  6. 2017-7-8 OpenStack手工+oz自动制作CentOS 7.3镜像
  7. 深圳中专计算机专业排名,深圳十大民办中专排行2019
  8. Android学习笔记之如何将数据保存到SDCard
  9. vc运行库合集 官方正式版 v2019.07.20
  10. FPGA数字时钟计数器
  11. OSChina 周五乱弹 —— 企鹅尼克号
  12. 谁曾从谁的时光里停留
  13. word中“项目符号”和后面的文字间隔太远
  14. 《Thinking In Java》作者:不要使用并发
  15. 安装银河麒麟桌面系统V10【超详细图文教程】
  16. idea2022报错: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
  17. windows环境下如何进入到mysql命令行界面
  18. 计算机共享网络热点,(传输)将win7计算机无线网络变成WiFi热点,使​​手机和笔记本电脑可以共享Internet...
  19. 3_22_doublewei1
  20. PTA L1-039 古风排版

热门文章

  1. T-SQL备忘(6):常用内置函数
  2. MVC Area Usage
  3. Android中简单的日期格式化
  4. SQLite数据库如何存储和读取二进制数据
  5. python控制灯_Python 控制树莓派 GPIO 输出:控制 LED 灯
  6. c语言编写程序求8,使用c语言编写程式,实现计算1*2*3+4*5*6+7*8*9+……+28*29*30的值...
  7. CentOS 6.8 安装FTP及添加用户
  8. 微软面试题:有100万个数字(1到9),其中只有1个数字重复2次,如何快速找出该数字
  9. React开发(103):详细路径 不然找不到
  10. 前端学习(3055):vue+element今日头条管理-反馈