Arraylist面试三连问
点赞在看,养成习惯,微信搜索「小大白日志」关注这个搬砖人。
本文在公众号文章已同步,还有各种一线大厂面试原题、我的学习系列笔记。
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面试三连问的更多相关文章
- 当面试官问我ArrayList和LinkedList哪个更占空间时,我这么答让他眼前一亮
前言 今天介绍一下Java的两个集合类,ArrayList和LinkedList,这两个集合的知识点几乎可以说面试必问的. 对于这两个集合类,相信大家都不陌生,ArrayList可以说是日常开发中用的 ...
- 最近找java实习面试被问到的东西总结(Java方向)
时间,就是这么很悄悄的溜走了将近两个年华,不知不觉的,研二了,作为一个一般学校的研究生,不知道该说自己是不学无术,还是说有过努力,反正,这两年里,有过坚持,有过堕落,这不,突然间,有种开窍的急迫感,寻 ...
- linux驱动工程面试必问知识点
linux内核原理面试必问(由易到难) 简单型 1:linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些? 2:linux中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化, ...
- Java面试常问的问题(转载)
并发.JVM.分布式.TCP/IP协议 1)Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap这一类的.以下简单模拟一个数据结构的连环炮. ...
- 面试官问线程安全的List,看完再也不怕了!
最近在Java技术栈知识星球里面有球友问到了线程安全的 List: 扫码查看答案或加入知识星球 栈长在之前的文章<出场率比较高的一道多线程安全面试题>里面讲过 ArrayList 的不安全 ...
- 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?
写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...
- [每日一题]面试官问:Async/Await 如何通过同步的方式实现异步?
关注「松宝写代码」,精选好文,每日一题 时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...
- [每日一题]面试官问:谈谈你对ES6的proxy的理解?
[每日一题]面试官问:谈谈你对ES6的proxy的理解? 关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...
- 每日一问:面试结束时面试官问"你有什么问题需要问我呢",该如何回答?
面试结束时面试官问"你有什么问题需要问我呢",该如何回答?
随机推荐
- 一致性检验评价方法kappa
最近在做眼底图像的无监督分类,使用的数据集辣子kaggle的Diabetic Retinopathy,简称DR,中文称糖尿病型眼底疾病. 最后的评估方法是二次加权kappa.以前没接触过,网上也没有具 ...
- 使用Pycharm IDE工具,使用input()函数出现>?符号
Python Console === 如果你是要Pycharm开发Python项目时,出现使用input函数,提示 >? 符号的时候,那应该是开启了Python Console控制台输出,取 ...
- 数组有没有 length()方法?String 有没有 length()方法?
数组没有 length()方法,有 length 的属性. String 有 length()方法.JavaScript中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java 混 ...
- mac-brew
brew search [TEXT|/REGEX/] 搜索软件 brew (info|home|options) [FORMULA...] 查询软件信息 brew install FORMULA... ...
- int 和 Integer 哪个会占用更多的内存?
Integer 对象会占用更多的内存.Integer 是一个对象,需要存储对象的元数据. 但是 int 是一个原始类型的数据,所以占用的空间更少.
- 常用缓存(cache)淘汰算法(LFU、LRU、ARC、FIFO、MRU)
缓存算法是指令的一个明细表,用于决定缓存系统中哪些数据应该被删去. 常见类型包括LFU.LRU.ARC.FIFO.MRU. 最不经常使用算法(LFU): 这个缓存算法使用一个计数器来记录条目被访问的频 ...
- Linux系统下ifconfig命令使用及结果分析
Linux下网卡命名规律:eth0,eth1.第一块以太网卡,第二块.lo为环回接口,它的IP地址固定为127.0.0.1,掩码8位.它代表你的机器本身. 1.ifconfig是查看网卡的信息. if ...
- 玩转 React(四)- 创造一个新的 HTML 标签
在第二篇文章 <新型前端开发方式> 中有说到 React 有很爽的一点就是给我们一种创造 HTML 标签的能力,那么今天这篇文章就详细讲解下 React 是如何提供这种能力的,作为前端开发 ...
- 小记-用canvas完成图像液化(向前变形)过程
前几天由于团队需要,折腾了一下图像液化的处理过程. 现在来整理一下思路,做个记录. 用到公式如下,网上拿来的 话不多说,上代码 本来想尽量写出点逼格...后来发现怎么写也还是几个function搞定, ...
- 小小标签,强大功能——深藏不露的 <input>
<input> 虽只是一个看似简单的 HTML 表单元素,但它这么一个单一的元素,就有多达 30 多个属性(attribute),相信无论你是个小菜鸟还是像我一样写了 15 年 HTML ...