Java集合总结【面试题+脑图】,将知识点一网打尽!

87道Java核心知识高频面试题Java集合+JVM与调优+并发编程+Redis 87道Java核心知识高频面试题Java集合+JVM与调优+并发编程+Redis 前言: 《金九银十》已接近尾声,BATJ一线大厂面试题疑难杂症一网打尽!今天跟大家分享一下Java集合,JVM与调优,并发编程,redis的面试题,当然我分享的往往不止这些面试题哦,关注我核心知识点的面试题都有哦,还有文末领取答案 Java集合22题 ArrayList 和 Vector 的区... 阅读详情

前言

声明,本文用的是jdk1.8

花了一个星期,把Java容器核心的知识过了一遍,感觉集合已经无所畏惧了!!(哈哈哈….),现在来总结一下吧~~

回顾目录:

Java容器可分为两大类:

  • Collection
    • List
      • ArrayList
      • LinkedList
      • Vector(了解,已过时)
    • Set
      • HashSet
        • LinkedHashSet
      • TreeSet
  • Map
    • HashMap
      • LinkedHashMap
    • TreeMap
    • ConcurrentHashMap
    • Hashtable(了解,,已过时)

着重标出的那些就是我们用得最多的容器。

其实,我也不知道要怎么总结好,因为之前写每一篇的时候都总结过了。现在又把他们重新罗列出来好像有点水,所以,我决定去回答一些Java容器的面试题!

当然了,我的答案未必就是正确的。如果有错误的地方大家多多包含,希望不吝在评论区留言指正~~

一、ArrayList和Vector的区别

共同点:

  • 这两个类都实现了List接口,它们都是有序的集合(存储有序),底层是数组。我们可以按位置索引号取出某个元素,允许元素重复和为null。

区别:

  • 同步性:
    • ArrayList是非同步的
    • Vector是同步的
    • 即便需要同步的时候,我们可以使用Collections工具类来构建出同步的ArrayList而不用Vector
  • 扩容大小:
    • Vector增长原来的一倍,ArrayList增长原来的0.5倍

二、HashMap和Hashtable的区别

共同点:

  • 从存储结构和实现来讲基本上都是相同的,都是实现Map接口~

区别:

  • 同步性:
  • 是否允许为null:
    • HashMap允许为null
    • Hashtable不允许为null
  • contains方法
    • 这知识点是在牛客网刷到的,没想到这种题还会有(我不太喜欢)….
    • Hashtable有contains方法
    • HashMap把Hashtable的contains方法去掉了,改成了containsValue和containsKey
  • 继承不同:
    • HashMap

三、List和Map的区别

共同点:

  • 都是Java常用的容器,都是接口(ps:写出来感觉好像和没写一样…..)

不同点:

  • 存储结构不同:
    • List是存储单列的集合
    • Map存储的是key-value键值对的集合
  • 元素是否可重复:
    • List允许元素重复
    • Map不允许key重复
  • 是否有序:
    • List集合是有序的(存储有序)
    • Map集合是无序的(存储无序)

四、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()?

我们知道Set集合实际大都使用的是Map集合的put方法来添加元素。

以HashSet为例,HashSet里的元素不能重复,在源码(HashMap)是这样体现的:


    // 1. 如果key 相等  
    if (p.hash == hash &&
        ((k = p.key) == key || (key != null && key.equals(k))))
        e = p;
    // 2. 修改对应的value
       if (e != null) { // existing mapping for key
            V oldValue = e.value;
            if (!onlyIfAbsent || oldValue == null)
                e.value = value;
            afterNodeAccess(e);
            return oldValue;
       }

添加元素的时候,如果key(也对应的Set集合的元素)相等,那么则修改value值。而在Set集合中,value值仅仅是一个Object对象罢了(该对象对Set本身而言是无用的)。

也就是说:Set集合如果添加的元素相同时,是根本没有插入的(仅修改了一个无用的value值)!从源码(HashMap)中也看出来,==和equals()方法都有使用!

五、Collection和Collections的区别

  1. Collection是集合的上级接口,继承它的有Set和List接口
  2. Collections是集合的工具类,提供了一系列的静态方法对集合的搜索、查找、同步等操作

六、说出ArrayList,LinkedList的存储性能和特性

ArrayList的底层是数组,LinkedList的底层是双向链表。

  • ArrayList它支持以角标位置进行索引出对应的元素(随机访问),而LinkedList则需要遍历整个链表来获取对应的元素。因此一般来说ArrayList的访问速度是要比LinkedList要快的
  • ArrayList由于是数组,对于删除和修改而言消耗是比较大(复制和移动数组实现),LinkedList是双向链表删除和修改只需要修改对应的指针即可,消耗是很小的。因此一般来说LinkedList的增删速度是要比ArrayList要快的

6.1扩展:

ArrayList的增删未必就是比LinkedList要慢。

  • 如果增删都是在末尾来操作【每次调用的都是remove()和add()】,此时ArrayList就不需要移动和复制数组来进行操作了。如果数据量有百万级的时,速度是会比LinkedList要快的。(我测试过)
  • 如果删除操作的位置是在中间。由于LinkedList的消耗主要是在遍历上,ArrayList的消耗主要是在移动和复制上(底层调用的是arraycopy()方法,是native方法)。
    • LinkedList的遍历速度是要慢于ArrayList的复制移动速度的
    • 如果数据量有百万级的时,还是ArrayList要快。(我测试过)

七、Enumeration和Iterator接口的区别

这个我在前面的文章中也没有详细去讲它们,只是大概知道的是:Iterator替代了Enumeration,Enumeration是一个旧的迭代器了。

与Enumeration相比,Iterator更加安全,因为当一个集合正在被遍历的时候,它会阻止其它线程去修改集合。

区别有三点:

  • Iterator的方法名比Enumeration更科学
  • Iterator有fail-fast机制,比Enumeration更安全
  • Iterator能够删除元素,Enumeration并不能删除元素

八、ListIterator有什么特点

  • ListIterator**继承了Iterator接口,它用于遍历List集合的元素**。
  • ListIterator可以实现双向遍历,添加元素,设置元素

看一下源码的方法就知道了:

九、并发集合类是什么?

Java1.5并发包(java.util.concurrent)包含线程安全集合类,允许在迭代时修改集合。

  • 迭代器被设计为fail-fast的,会抛出ConcurrentModificationException。
  • 一部分类为:
    • CopyOnWriteArrayList
    • ConcurrentHashMap
    • CopyOnWriteArraySet

十、Java中HashMap的key值要是为类对象则该类需要满足什么条件?

需要同时重写该类的hashCode()方法和它的equals()方法。

  • 从源码可以得知,在插入元素的时候是先算出该对象的hashCode。如果hashcode相等话的。那么表明该对象是存储在同一个位置上的。
  • 如果调用equals()方法,两个key相同,则替换元素
  • 如果调用equals()方法,两个key不相同,则说明该hashCode仅仅是碰巧相同,此时是散列冲突,将新增的元素放在桶子上

一般来说,我们会认为:只要两个对象的成员变量的值是相等的,那么我们就认为这两个对象是相等的!因为,Object底层比较的是两个对象的地址,而对我们开发来说这样的意义并不大~这也就为什么我们要重写equals()方法

重写了equals()方法,就要重写hashCode()的方法。因为equals()认定了这两个对象相同,而同一个对象调用hashCode()方法时,是应该返回相同的值的!

十一、与Java集合框架相关的有哪些最好的实践

  1. 根据需要确定集合的类型。如果是单列的集合,我们考虑用Collection下的子接口ArrayList和Set。如果是映射,我们就考虑使用Map~
  2. 确定完我们的集合类型,我们接下来确定使用该集合类型下的哪个子类~我认为可以简单分成几个步骤:
    • 是否需要同步
      • 去找线程安全的集合类使用
    • 迭代时是否需要有序(插入顺序有序)
      • 去找Linked双向列表结构的
    • 是否需要排序(自然顺序或者手动排序)
      • 去找Tree红黑树类型的(JDK1.8)
  3. 估算存放集合的数据量有多大,无论是List还是Map,它们实现动态增长,都是有性能消耗的。在初始集合的时候给出一个合理的容量会减少动态增长时的消耗~
  4. 使用泛型,避免在运行时出现ClassCastException
  5. 尽可能使用Collections工具类,或者获取只读、同步或空的集合,而非编写自己的实现。它将会提供代码重用性,它有着更好的稳定性和可维护性

十二、ArrayList集合加入1万条数据,应该怎么提高效率

ArrayList的默认初始容量为10,要插入大量数据的时候需要不断扩容,而扩容是非常影响性能的。因此,现在明确了10万条数据了,我们可以直接在初始化的时候就设置ArrayList的容量!

这样就可以提高效率了~

十三、总结

2018年4月15日17:14:03,上面找了一些面试题答了一下,感觉不够过瘾呀。很多我觉得比较重要的知识点我都没有找到对应的面试题(可能我搜索的能力太水了?)。

将这篇文章作为集合的总结篇,但觉得没什么好写就回答一些面试题去了,找了一会面试题又觉得不够系统。而这篇总结我又不想复制前面的章节总结到这里来。于是我决定画一个脑图来结束这篇文章!

2018年4月15日19:31:33 画完啦!!!!!

需要更多脑图的同学可关注公众号:Java3y,回复【脑图】即可~

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y。为了大家方便,刚新建了一下qq群:742919422,大家也可以去交流交流。谢谢支持了!希望能多介绍给其他有需要的朋友

文章的目录导航:https://zhongfucheng.bitcron.com/post/shou-ji/wen-zhang-dao-hang

目前初步打算写多线程,你们觉得怎么样呢?可以在评论区留言~

深入解析i2cdetect:从基础命令到高级读写操作 本文深入解析Linux下i2cdetect工具,从基础安装、总线扫描到高级读写操作。作为i2c-tools的核心组件,i2cdetect是硬件调试的得力侦探,能快速识别I2C总线上的设备地址。文章还涵盖了i2cdump、i2cset、i2cget等进阶工具,并介绍了如何在C程序中调用读写接口进行嵌入式开发,是掌握I2C通信调试的实用指南。 阅读详情

相关推荐

学习记录-Simpack生成车轮不圆的几种示例

单阶、多阶和实测车轮多边形的添加教程

weixin_51965897的博客 3706

Java集合总结---Xmind思维导图

Java集合要从两大接口说起,一为Collection接口,二为Map接口,它们是同一个层次的。Collection接口被List接口和Set接口继承;List接口有三个实现类:ArrayList,LinkedList,Vector;Set接口被HashSet类实现,被SortedSet接口继承,同时TreeSet类实现SortedSet接口,LinkedHashSet类继承HashSet类;Map接口有两个实现类,HashMap,HashTable。无序:存取顺序不一致不重复:可以去除重复。

fly的博客 999

【AI赋能】Sora + CapCut 打造爆款短视频:从脚本到发布的自动化工作流

本文详细介绍了如何利用Sora、Grok和CapCut等AI工具构建自动化短视频生产工作流。通过结构化Prompt生成专业脚本,借助Sora将文字转化为高质量视频素材,并利用CapCut进行高效剪辑与合成,实现从创意到发布的十倍效率提升,助力个人及团队打造爆款内容。

g8f9d0s1a2的博客 497

Java集合--思维导图形式(清晰)

常用的集合体系 (思维导图太大,直接放进来不清晰,故以分解的形式从上至下展示) List、Set、Map三者之间的区别 Collection底层数据结构 Map底层数据结构 线程安全的集合类 Iterator接口及其使用(顺便可以复习下内部类) 如何遍历删除集合中的元素 遍历集合的三种方式 数组转List ArrayList和LinkedList的区别 ArrayList如何转线程安全? List和Set的区别 HashCode和equals Set中的 == 和 equals

qq_44972915的博客 2182

prometheus 从入门到精通(史上最全)

Prometheus(由go语言开发)是一套开源的监控&报警&时间序列(按照时间排序)数据库的组合。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。它可以监控主机,服务,容器,支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。原文链接:https://blog.youkuaiyun.com/qq_45277554/article/details/130917620时间序列数据。

流水_鱼鱼的博客 1万+

广告推荐算法 - 学习笔记(持续更新中)

本篇博客,是我用来记录学习广告推荐算法的一些笔记和总结。王喆:"深度"学习计算广告计算广告系统的核心目标是通过数据、算法和技术,在合适的场景下,将最相关的广告精准推送给目标用户,同时实现广告主媒体平台和用户之间的多方利益最大化。广告主:需求方核心目标:通过精准投放广告,最大化转化(如点击、购买)并控制成本,提升投资回报率(ROI)。关键行为:广告创建,定向设置,预算与出价策略,效果监控媒体平台:供给方核心目标:最大化广告收入,同时保持用户体验以避免用户流失。

qq_39748832的博客 2197

HashSet详解

HashSet也是一个使用频率非常高的一个集合容器,最大的特点是存储的元素是没有重复的,而且是无序的,那么对于HashSet是如何判断原始是否重复、底层又是怎么实现的,你了解吗?HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。集合中的元素不重复允许有null值是无序的,即不会记录插入的顺序不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的实现了Set接口,表名是一个去重集合容器。...

ch98000的博客 1万+

卡门涡街可视化实战:从网格加密策略到动画后处理技巧

本文详细介绍了利用ANSYS Fluent进行卡门涡街可视化模拟的全流程,包括网格加密策略、求解器设置、涡街捕捉及动画后处理技巧。通过计算流体力学(CFD)方法,帮助工程师和研究人员高效模拟圆柱绕流现象,优化工程设计。

weixin_29309785的博客 414

java集合是wftc_Java集合总结【面试题+脑图】,将知识点一网打尽!

前言声明,本文用的是jdk1.8花了一个星期,把Java容器核心的知识过了一遍,感觉集合已经无所畏惧了!!(哈哈哈....),现在来总结一下吧~~回顾目录:Java容器可分为两大类:CollectionListArrayListLinkedListVector(了解,已过时)SetHashSetLinkedHashSetTreeSetMapHashMapLinkedHashMapTreeMapCo...

weixin_26905423的博客 146

IP-Guard安全网关实例

企业相关情况: 1.OA系统,主要为日常工作使用,该系统IP为192.168.1.2,端口为8080; 2.文件共享服务器,用于存放日常工作资料和文档,该文件共享服务器的IP为192.168.1.1,其中\\192.168.1.1\private 目录中的存放着公司重要文档,不能随意外传; 3.安全网关已采用串联的方式联入网络,IP为192.168.2.6,所有机器访问OA系统和文件共享服务...

IP-Guard专栏 707

uniapp [安卓苹果App端] - 详细实现下载文件保存到用户手机本地,指定文件存储位置路径及文件夹名称下载并保存,Uniapp app端将文件下载保存并储存到指定目录(手机系统存储空间权限检测)

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,app端下载文件,移动端文件下载,并保存到手机本地存储空间,uniapp下载文件保存到手机本地,iOS下载文件怎么保存,系统读写存储空间权限,下载文件到本地详细流程及源代码,保存自定义目录,uniapp,实现下载文件并保存到本地,文件后缀,如何指定手机的存放目录路径url,点击下载文档到手机中并提示存储位置,如何在uniapp中实现文件下载功能,uniApp文件下载,怎么指定文件保存目录,下载报错,没反应

🏆 前端领域优质创作者 1万+

collection集合 地址_Java集合总结【面试题+脑图】,将知识点一网打尽!

前言声明,本文用的是jdk1.8花了一个星期,把Java容器核心的知识过了一遍,感觉集合已经无所畏惧了!!(哈哈哈....),现在来总结一下吧~~回顾目录:Collection总览List集合就这么简单【源码剖析】Map集合、散列表、红黑树介绍HashMap就是这么简单【源码剖析】LinkedHashMap就这么简单【源码剖析】TreeMap就这么简单【源码剖析】ConcurrentHashMap...

weixin_39968724的博客 86

时间序列分析(Time Series Analysis) 原理与代码实例讲解

时间序列分析(Time Series Analysis) - 原理与代码实例讲解 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 关键词:时间序列预测,ARIMA模型,状态空间模型,SARIMA模型,机器学习

AI天才研究院 1248

Java集合总结【面试题+脑图】,将知识点一网打尽

Java容器可分为两大类: Collection List ArrayList LinkedList Vector(了解,已过时) Set HashSet LinkedHashSet TreeSet Map HashMap LinkedHashMap TreeMap ConcurrentHashMap Hashtable(了解,,已过时) 着重标出的那些就是我们用得最多的容器。 其实,我也不知道要怎么总结好,..

m0_67698950的博客 368

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java面试、进阶、实践一网打尽(由电子工业出版社出版)

本书主要通过代码案例帮助读者学习Java基础部分的相关知识,大部分内容都是以代码的形式呈现的,讲解部分也融入到了代码注释中。通过阅读本书,读者可以更轻松、高效地掌握Java的语法结构与编程思维。本书不仅介绍了Java中的基础语法结构,比如常量、变量、流程控制、数组、方法(函数)、面向对象、封装、继承、多态、抽象、接口、异常等,还介绍了日常开发中常见的一些工具类的相关使用方法。每个知识点都配备了相应的案例,包括具体的使用场景。本书内容以案例为主,对以实操为出发点的读者会更加友好。

m0_74823239的博客 931

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

一网打尽!2024年Java春招面试题库大全(含答案解析)

的学习,你不但能拿到 Offer、取得更好的工作,还能建立一个完整的 Java 知识体系,让你学到的所有内容都能转化为实际的生产力,帮你在工作中取得不凡的成绩。最后,预祝每一位学习本专栏的朋友,都能找到一份自己理想中的工作。之后我花了大半年的时间,结合自己 4 年多作为面试官的经历,把这些内容整理成文,用大约 15 万字的内容对 Java 的核心知识点和常见的 1000多道面试题,做了详细的介绍,也就是本专栏中你所看到的全部内容,希望对正处于求职面试、跳槽、以及需要提升技术的你带来帮助!

sinat_53467514的博客 1068

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

这份Java核心知识点整理PDF,几乎涵盖了所有Java岗位的面试题!

Java知识体系庞大,面试准备是一个系统工程,光看资料是不够的,一定要动手写代码、总结自己的项目经验。这份宝典可以作为你的“面试地图”,帮你查漏补缺,知道哪些地方还没掌握。但真正的面试,还需要你把这些知识点内化为自己的理解。祝大家面试顺利,拿到心仪的Offer!🚀。

sjkflw121150的博客 251
上一篇: 脑图大全
下一篇: 操作系统第七篇【设备管理】
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值