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 集合就像一种容器 ...
随机推荐
- 概率dp——cf518D
通过最后的概率求最终的期望 #include<bits/stdc++.h> using namespace std; ; double p,dp[maxn][maxn]; int n,t; ...
- vue中axios使用封装
一.在main.js导入 // 引入axios,并加到原型链中 import axios from 'axios'; Vue.prototype.$axios = axios; import QS f ...
- poj2954Triangle
传送门 Pick定理 定点坐标为整点的三角形,面积为S,边上的整点个数为L,三角形内部整点个数为N S=N+L/2-1 //Achen #include<algorithm> #inclu ...
- IIS服务器不可用
很恼火,突然发现IIS中的应用程序不能浏览页面了,试了试任何一个aspx页面也打不开.重新用vs.net建立了个新的web应用程序,现象依旧. 电脑环境: win2003 问题现象: 1)当想浏览某个 ...
- day 66 Django基础之jQuery操作cookie
Django基础之jQuery操作cookie jquery之cookie操作 定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术: 下载与引入:jquery. ...
- 左神算法进阶班1_1添加最少字符得到原字符N次
Problem: 给定一个字符串str1,只能往str1的后面添加字符变成str2. 要求1:str2必须包含两个str1,两个str1可以有重合,但是不能以同一个位置开头. 要求2:str2尽量短最 ...
- day3:python测试题
1.Python的怎么单行注释和多行注释: 单行注释:# 多行注释: ''' ''' 或者 “”“ ”“” . 2.布尔值分别是什么 ? True /Fa ...
- <Django> 第三方扩展
1.富文本编辑器 tinymce为例 安装 pip install django-tinymce 在settings.py中的配置 配置应用 INSTALLED_APPS = [ 'django.co ...
- 自己新机器安装CM时候 server服务启动DB配置
com.cloudera.cmf.db.type=mysqlcom.cloudera.cmf.db.host=localhost:3306com.cloudera.cmf.db.name=cmfcom ...
- Ubuntu环境下java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
一.问题描述 Ubuntu环境中,将maven项目打包成jar包传到服务器中后运行以下指令: $ java -cp my.jar com.myproject.Main 遇到报错: java.lang. ...