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,每日一 ...
- 每日一问:面试结束时面试官问"你有什么问题需要问我呢",该如何回答?
面试结束时面试官问"你有什么问题需要问我呢",该如何回答?
随机推荐
- synchronized和 synchronized 了解偏向锁、轻量级锁、重量级锁的概念以及升级机制、以及和ReentrantLock的区别。
并发 synchronized 了解偏向锁.轻量级锁.重量级锁的概念以及升级机制.以及和ReentrantLock的区别. https://www.cnblogs.com/deltadeb ...
- jQuery--筛选【查找函数】
查找函数介绍 <A> <B> <C></C> <D></D> <E></E> <F>< ...
- gradle构建scala
1. 在目录下创建build.gradle文件,内容为: apply plugin: 'idea' apply plugin: 'scala' repositories { mavenLocal() ...
- piwik安装部署
1.piwik介绍 Piwik是一个PHP和MySQL的开放源代码的Web统计软件,它给你一些关于你的网站的实用统计报告,比如网页浏览人数,访问最多的页面,搜索引擎关键词等等. Piwik拥有众多不同 ...
- C++ | 虚函数初探
虚函数 虚函数 是在基类中使用关键字 virtual 声明的函数.在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数. 我们想要的是在程序中任意点可以根据所调用的对象类型来选择调 ...
- CEPH-4:ceph RadowGW对象存储功能详解
ceph RadosGW对象存储使用详解 一个完整的ceph集群,可以提供块存储.文件系统和对象存储. 本节主要介绍对象存储RadosGw功能如何灵活的使用,集群背景: $ ceph -s clust ...
- Semantic UI 语义化设计的前端框架
UI是Web的灵魂!Semantic UI是一款语义化设计的前端框架,为攻城师而制作的可复用的开源前端框架. 特性 弃用有歧义的表述 Semantic是围绕自然交流语言而架构的,这使得开发更加直观(易 ...
- 纯css模拟电子钟
先看效果 演示地址: https://yueminhu.github.io/di...点击左边拉环切换夜间模式. 用到了伪元素生成数字的小三角`currentColor和color: inherit` ...
- Redis 中的过期删除策略和内存淘汰机制
Redis 中 key 的过期删除策略 前言 Redis 中 key 的过期删除策略 1.定时删除 2.惰性删除 3.定期删除 Redis 中过期删除策略 从库是否会脏读主库创建的过期键 内存淘汰机制 ...
- vue简单的父子组件之间传值
todo-list为例子: 代码: 父传子--------------属性 v-bind 子传父--------------$emit <!DOCTYPE html> <html ...