点赞在看,养成习惯,微信搜索「小大白日志」关注这个搬砖人。

本文在公众号文章已同步,还有各种一线大厂面试原题、我的学习系列笔记。

Arraylist为什么要加transient?

ArrayList源码中的数组为:transient Object[] elementData;

因为Arraylist有初始化大小,往往Arraylist的长度是大于实际元素个数,序列化这些空闲位置的内容会很浪费,但加上transient关键字后,在序列化的时候elementData不被序列化,所以同时Arraylist重写了序列化所需的writeObject()、readObject()方法,只序列化elementData数组中有值的位置的元素

Arraylist中add和get的时间复杂度?

add(i)、get(i)时间复杂度都是O(1),add(index,value)时间复杂度为O(n)

  • Arraylist中add源码:两种方法添加元素
//把元素添加到数组尾部
public boolean add(E e) {
ensureCapacityInternal(size + 1); // 检查是否需要扩容,size为当前实际元素个数,size+1为添加元素后所需的最小数组容量;第一次添加元素时size为0,传入1
elementData[size++] = e;//检查完再往里面添加元素
return true;
}
//把元素添加到数组特定的下标处
public void add(int index, E element) {
rangeCheckForAdd(index);
ensureCapacityInternal(size + 1); // 检查是否需要扩容
System.arraycopy(elementData, index, elementData, index + 1,size - index);//检查完先拷贝元素:把元素后移
elementData[index] = element;//再添加元素
size++;
}
  • Arraylist中get()源码
public E get(int index){
rangeCheck(index);
return elementData(index);
}
public E elementData(index){
return (E)elementData[index];
}

ArrayList和LinkedList的区别?

  • 底层数据结构不同

ArrayList的底层结构是数组:

transient Object[] elementData;

LinkedList是双链表:

transient Node<E> first;
transient Node<E> end;
  • ArrayList的添加删除操作需要移动元素,效率慢;LinkedList只改变指针位置即可,效率块
  • ArrayList直接通过下标可以随机访问元素,效率块快;LinkedList需要遍历链表才能访问元素,效率慢
  • ArrayList一般占用的空间比实际存储元素的空间大,而LinkedList则在添加新元素时实时获取新的空间
  • 应用场景:ArrayList适合应用于多查询少插入,LinkedList适合应用与多插入少查询;但若在数组尾部插入元素,ArrayList只需移动少量元素即可,而LinkedList还需要找到链表尾部才可插入,此时ArrayList比LinkedList效率高

OK,如果文章哪里有错误或不足,欢迎各位留言。

创作不易,各位的「三连」是二少创作的最大动力!我们下期见!

Arraylist面试三连问的更多相关文章

  1. 当面试官问我ArrayList和LinkedList哪个更占空间时,我这么答让他眼前一亮

    前言 今天介绍一下Java的两个集合类,ArrayList和LinkedList,这两个集合的知识点几乎可以说面试必问的. 对于这两个集合类,相信大家都不陌生,ArrayList可以说是日常开发中用的 ...

  2. 最近找java实习面试被问到的东西总结(Java方向)

    时间,就是这么很悄悄的溜走了将近两个年华,不知不觉的,研二了,作为一个一般学校的研究生,不知道该说自己是不学无术,还是说有过努力,反正,这两年里,有过坚持,有过堕落,这不,突然间,有种开窍的急迫感,寻 ...

  3. linux驱动工程面试必问知识点

    linux内核原理面试必问(由易到难) 简单型 1:linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些? 2:linux中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化, ...

  4. Java面试常问的问题(转载)

    并发.JVM.分布式.TCP/IP协议 1)Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap这一类的.以下简单模拟一个数据结构的连环炮. ...

  5. 面试官问线程安全的List,看完再也不怕了!

    最近在Java技术栈知识星球里面有球友问到了线程安全的 List: 扫码查看答案或加入知识星球 栈长在之前的文章<出场率比较高的一道多线程安全面试题>里面讲过 ArrayList 的不安全 ...

  6. 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?

    写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...

  7. [每日一题]面试官问:Async/Await 如何通过同步的方式实现异步?

    关注「松宝写代码」,精选好文,每日一题 ​时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...

  8. [每日一题]面试官问:谈谈你对ES6的proxy的理解?

    [每日一题]面试官问:谈谈你对ES6的proxy的理解? 关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...

  9. 每日一问:面试结束时面试官问"你有什么问题需要问我呢",该如何回答?

    面试结束时面试官问"你有什么问题需要问我呢",该如何回答?

随机推荐

  1. Adobe AIR 应用程序图标详细描述

    官方PDF文档: http://help.adobe.com/zh_CN/air/build/WS901d38e593cd1bac1e63e3d129907d2886-8000.html#WS901d ...

  2. IDEA terminal无法从vim的编辑模式转换为命令模式

    Git 修改最后一次的commit历史记录:https://www.baidu.com/link?url=2WF8yFd0iBuVmXLWfutmSoXa12K9D143e_B0A3PTYYHEP9r ...

  3. System.getenv和getProperty的区别

    /** * System.getenv()是获取---环境变量(environment variables), * 系统层面的,好比我linux系统里的.bash_profile文件里面的变量 * 返 ...

  4. MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐 级之间的区别?

    SQL 标准定义的四个隔离级别为: 1.read uncommited :读到未提交数据 2.read committed:脏读,不可重复读 3.repeatable read:可重读 4.seria ...

  5. java-网络通信--socket实现多人聊天(基于命令行)

    先编写最简答的服务器 思路 1编写一个实现Runnable接口的静态内部类 ServerC,便于区分每个客户端 1.1 获取客户端数据函数 public String remsg() 1.2 转发消息 ...

  6. 机器学习 machine learn

    机器学习 机器学习 概述 什么是机器学习 机器学习是一门能够让编程计算机从数据中学习的计算机科学.一个计算机程序在完成任务T之后,获得经验E,其表现效果为P,如果任务T的性能表现,也就是用以衡量的P, ...

  7. apollo规划控制视频-12basic motion planning and overview

  8. c++中的printf、和cout和cin后面跟指针的问题

    printf里面打印指针的问题 而在c语言中,使用printf只需要使用不同的格式就可以区分打印出是字符串还是指针变量的值: cout和cin后面跟指针的问题 cout<<mm 和cin& ...

  9. linux命令手册

    常⻅系统服务命令 常用命令 作用 chkconfig --list 列出系统服务 service <服务名> status 查看某个服务 service <服务名> start ...

  10. 微信小程序要求HTTPS,如何选择SSL证书?

    为了保护小程序应用安全,微信官方的需求文档要求,每个微信小程序必须事先设置一个通讯域名,并通过HTTPS请求进行网络通信,不满足条件的域名和协议无法请求.因此开发者应先准备好配置好HTTPS证书的域名 ...