Java基础——List集合整理(脑图,源码,面试题)
常在知乎牛客网关注Java的一些面试,了解过校招社招常面哪些内容。Java集合不仅使用频率高而且在初面中也常常被问到,何止是常常,关于ArrayList的扩容,HashMap的一些底层等等都被问到烂了。因此,稍微深入学习下集合这部分迫在眉睫。以下为自己的一些知识点总结与网上搜刮来的面试题总结。
1.集合的引入
数组大小固定且只能够存储同一种类型的元素,集合容量可动态改变。
数组能存储基本数据类型和引用类型,集合只能存储引用类型(你存储的是int,会自动装箱成Integer)
2.掌握集合的体系结构
引用自CSDN:https://blog.csdn.net/haovip123/article/details/45423683
3.掌握以ArrayList为代表的增删改查和一些其他API的使用
ArrayList可以说是使用频率很高的集合,掌握以它为代表的常用API的使用,如add,addAll,remove,遍历等。
4.源码分析List集合之ArrayList与Vector的剖析
具体的细节不予多讲,前辈们都在源码的基础上剖析总结的非常细致,在他们的基础上学习即可。附连接
https://blog.csdn.net/panweiwei1994/article/details/76760238
https://blog.csdn.net/panweiwei1994/article/details/77110354
https://blog.csdn.net/zymx14/article/details/78324464
https://juejin.im/post/5ad40593f265da23750759ad
重点小结:
ArrayList集合与Vector集合的区别?
ArrayList与Vecto都实现了List接口,具有元素有序允许重复和为null的特点。底层都采用数组,具有数组增删慢,查询快的特点。主要区别是Vector集合(只做了简单了解)给所有的api都套上了synchronized修饰,所以Vector集合是同步的,在线程上安全的,但有得必有失,失去的是代码在实现同步时间花销大(有些操作你不需要进行同步操作它也给你进行了这是它最大的缺点)。其次在实现动态扩容时,ArrayList是原来的1.5倍而Vector是原来的2倍。
关于ArrayList的扩容是如何实现的原理是什么?
首先明确ArrayList的构造方法有三种,默认的initCapacity容量为10,如果初始化时一开始指定了容量,或者通过集合作为元素,则容量为指定的大小或参数集合的大小。每次扩容为原来的1.5倍,如果扩容后的容量小于所需的最小容量,则数组容量为所需的最小容量。如果扩容后的容量大于所需的最小容量,则数组容量为扩容后的容量。 每次扩容后都要调用arraycopy ,涉及到整个数组的复制和移动。所以要尽量减少扩容的次数提高效率,在数据量比较大的时候初始化时指定容量的大小。
LinkedList的底层与常用方法实现的了解
LinkedList也实现了List接口,有序且允许元素重复和为null值,底层是双向链表,具有链表增删效率高和查询效率慢的特点。虽然它在查询实现时采用了折半查找提高效率的思想,但在查询上还是比不过按索引查的ArrayList.做过单链表,双向链表练习的人应该再看LinkedList源代码感到很熟悉。
5.List集合面试题总结:
结合源代码与上面贴的博客链接认真看完,在回答下面的List集合的面试题就比较自信了。之前有整理过,这次在整理过一遍,答案见:
https://www.cnblogs.com/zengcongcong/p/10805799.html
1.请比较ArrayList集合与Vector的区别?
2.往ArrayList集合加入一万条数据,应该怎么提高效率?
3. ArrayList插入删除一定很慢吗?
4.ArrayList的遍历和LinkedList遍历性能比较如何?
5. ArrayList是如何扩容的\ArrayList是如何实现自动增加的?
6. 什么情况下你会使用ArrayList?什么时候你会选择LinkedList?
7. 如何复制某个ArrayList到另一个ArrayList中去?
8. 在索引中ArrayList的增加或者删除某个对象的运行过程?效率很低吗?解释一下为什么?
9. ArrayList list = new ArrayList(20);中的list扩充_____次。
10.下列代码判读扩容了几次?
每一次的add都要检查容量是否足够,这里使用for循环一个个增加元素,所以扩容过程为20->30->45->67,3次。
11.有如下代码,判断list最后容量的大小。
可知list初始化为5个容量,之后一次性增加15个容量,第一次扩容为10,之后发现15>10,所以15为数组的新容量。调用debug我们可以查看
Java基础——List集合整理(脑图,源码,面试题)的更多相关文章
- java基础,集合,HashMap,源码解析
最怕,你以为你懂咯,其实你还不懂: 见贤思齐,看看那些我们习以为常的集合,通过相关定义.源码,思考分析,加深对其的理解,提高编码能力,能做一个略懂的程序员: 做几个我们常用的集合类.开篇HashMap ...
- java基础,集合,Arraylist,源码解析(基础)
ArrayList 是什么,定义? 这是动态的数组,它提供了动态的增加和减少元素,实现了List接口(List实现Collection,所以也实现Collection接口)灵活的设置数组的大小等好处 ...
- Java基础知识➣集合整理(三)
概述 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个层次. 实现(类) ...
- 备战金三银四!一线互联网公司java岗面试题整理:Java基础+多线程+集合+JVM合集!
前言 回首来看2020年,真的是印象中过的最快的一年了,真的是时间过的飞快,还没反应过来年就夸完了,相信大家也已经开始上班了!俗话说新年新气象,马上就要到了一年之中最重要的金三银四,之前一直有粉丝要求 ...
- 第6节:Java基础 - 三大集合(上)
第6节:Java基础 - 三大集合(上) 本小节是Java基础篇章的第四小节,主要介绍Java中的常用集合知识点,涉及到的内容包括Java中的三大集合的引出,以及HashMap,Hashtable和C ...
- Java集合系列[4]----LinkedHashMap源码分析
这篇文章我们开始分析LinkedHashMap的源码,LinkedHashMap继承了HashMap,也就是说LinkedHashMap是在HashMap的基础上扩展而来的,因此在看LinkedHas ...
- java基础-Map集合
java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...
- Java中的容器(集合)之HashMap源码解析
1.HashMap源码解析(JDK8) 基础原理: 对比上一篇<Java中的容器(集合)之ArrayList源码解析>而言,本篇只解析HashMap常用的核心方法的源码. HashMap是 ...
- 【Java基础】集合
集合 集合概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储.另一方面,使用 Array 存储对象方面具有一些弊端,而 Java 集合就像一种容器 ...
随机推荐
- 【luoguP3868】猜数字
description 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n ...
- Model ModelMap ModelAndView
前言 Spring MVC在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器. 如果方法的入参为ModelMap,Model,Map类型,Spring MVC会将隐含模型的引用传递给这些入参. ...
- python相关软件安装流程图解——Windows下安装Redis以及可视化工具——Redis-x64-3.2.100——redis-desktop-manager-0.9.3.817
https://www.2cto.com/database/201708/666191.html https://github.com/MicrosoftArchive/redis/releases ...
- Android_Gallery(画廊)
转:http://blog.csdn.net/tianjf0514/article/details/7521398 Gallery是画廊的意思,可以实现图片的浏览功能. 主要内容 Gallery控件的 ...
- el-table单元格新增、编辑、删除功能
<template> <div class="box"> <el-button class="addBtn" type=" ...
- POJ-2255-Tree Recovery-求后序
Little Valentine liked playing with binary trees very much. Her favorite game was constructing rando ...
- day 54 Django基础四之模板系统
Django基础四之模板系统 本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模 ...
- ie6-8 avalon2 单页应用项目实战备忘
坑爹的ie,作为小组leader,尼玛,小伙伴儿们不乐意做的事情,我来做好了..心累... 如果,各位同学有定制开发ie6-8版本的需求,还是尽量不要用单页应用模式了,也不要用avalon这类mvvm ...
- 开机自动调用.bat文件且浏览器全屏展示
1,将 .bat文件放入到以下路径中 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 或 C:\Users\Administr ...
- AM运行中的垃圾数据清理
1.下载 filetmpclear.bat 2.打开 这个批处理文件,修改参数 3.按下图 第一个红色框内, 地址: 可以在 AM8服务管理器- 文件服务 ,数据路径后再加 \__Temp__ 第 ...