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,每日一 ...
- 每日一问:面试结束时面试官问"你有什么问题需要问我呢",该如何回答?
面试结束时面试官问"你有什么问题需要问我呢",该如何回答?
随机推荐
- 为什么JVM要用到压缩指针?Java对象要求8字节的整数倍?
前言 前两天在一个帖子中看到一道面试题: 堆内存超过32G时,为什么压缩指针失效? 之前没有了解过这方面的知识,于是开始google起来,但当我翻看了不下一页的帖子,我都仍然没有搞懂,因为好多答案给我 ...
- nginx反向代理失败,又是 fastdfs 的锅
fdfs问题记录 [root@hostcad logs]# systemctl status fdfs_trackerd.service ● fdfs_trackerd.service - LSB: ...
- 比较一下 Java 和 JavaSciprt?
JavaScript 与 Java 是两个公司开发的不同的两个产品.Java 是原 Sun Microsystems 公司推出的面向对象的程序设计语言,特别适合于互联网应用程序 开发:而 JavaSc ...
- 什么是memecache?redis 和 memecache 有什么区别?
什么是memecache? memcached是一套分布式的高速缓存系统,与redis相似.一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度.提高可扩展性.为了 ...
- SpirngMVC源码分析
分析过程 通过 前端控制器源码 分析 SpringMVC 的执行过程 前端控制器在 web.xml 文件中的配置 <!-- springmvc 前端控制器 --> <servlet& ...
- js里面是没有Trim()这个方法的可以用以下的形式来判断是否输入的值为空
if (text.value.replace(/\s+/g, "").length == 0)
- 使用Ansible部署openstack平台
使用Ansible部署openstack平台 本周没啥博客水了,就放个云计算的作业上来吧(偷个懒) 案例描述 1.了解高可用OpenStack平台架构 2.了解Ansible部署工具的使用 3.使用A ...
- 学习移动机器人SLAM、路径规划必看的几本书
作者:小白学移动机器人链接:https://zhuanlan.zhihu.com/p/168027225来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 声明:推荐正版图 ...
- PID算法原理 一图看懂PID的三个参数
找了好久这一篇算是很容易看懂的了 推荐给大家 写的十分清楚 原文作者DF创客社区virtualwiz LZ以前有个小小的理想,就是让手边的MCU自己"思考"起来,写出真正 ...
- chrome插件one-read开发1:准备
阅读我的博客文章:chrome插件one-read开发:准备 前言 为啥要做这个,因为我原本想用chrome做一个书签管理的东西,但是很久没有碰过chrome的插件开发了.所以先做一个简单的,来熟悉下 ...