Java原来还能够这么学:如何搞定面试中必考的集合类

副本_未命名.jpg

原创声明

本文做者:黄小斜java

转载请务必在文章开头注明出处和做者。git

系列文章介绍

本文是《五分钟学Java》系列文章的一篇程序员

本系列文章主要围绕Java程序员必须掌握的核心技能,结合我我的三年多的Java学习和工做经历,总结和沉淀下来的方法论,但愿能让Java学习这件事变得更简单,做者目前在阿里作Java,忙里偷闲分享一些技术文章github

系列文章将会把一些技术学习方法、过程、要领与个人学习经验相结合,更加浅显易懂,而且我也会把我学习时用的资料,书籍和文章拿出来分享给你们,节省你个人时间。所谓授人以鱼也要授人以渔,是本系列文章但愿达到的目标。面试

简介

最近的你有没有参加Java面试呢?你有没有发现,Java面试中老是爱考一类问题,那就是集合类,为何对集合类的考察会如此受欢迎呢,其实啊,主要是由于集合类的使用范围实在是太广了,不论是开发中,仍是框架源码中,每每都会用到集合类。算法

像我们平时面试常常遇到的问题,好比hashmap、linkedlist,或者是阻塞队列等集合类,每每都是我们工做中须要用到的一些工具。编程

根据百度百科的定义,集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容,它容许以各类方式将元素分组,并定义了各类使这些元素更容易操做的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和加强后再以一个类的形式提供。集合类是能够往里面保存多个对象的类,存放的是对象,不一样的集合类有不一样的功能和特色,适合不一样的场合,用以解决一些实际问题。后端

能够看出,集合类就是util包里的一类工具,用好集合类,能帮忙咱们解决不少工做中的问题,而学好集合类,才能让咱们在面试中无往而不利。api

为何面试总爱问Java集合类

有Java面试经历的朋友们都知道,Java面试最喜欢问的集合类问题就是:hashmap和hashtable的区别,linkedlist和arraylist的区别是什么,稍微复杂一点的话,则可能会问:hashmap的初始容量是多少,它的扩容方式是什么样的,它的内部结构是什么样的。数组

诸如此类问题,深受广大互联网公司欢迎,固然,这些都是Java初级面试的问题,算是基础中的基础了。

为何面试官老是喜欢问集合类呢,依我看来,有这么几个缘由:集合类里是Java里使用范围最广,使用频率最高的api了,而且这玩意的通用性很强,不少框架都得使用,若是想要看懂框架源码,那么你就必需要掌握集合类的知识。

其次,集合类里蕴藏了不少数据结构与算法的知识,正由于如此,若是你能正确地理解这些集合类,那么想必你对于数据结构和算法的理解也差不到哪。

还有就是,Java集合类里的不少源码都是几个Java创始人大牛写的,代码质量和风格都很是值得咱们学习,里面用到的一些算法和解决问题的方法也很是值得效仿,而这些,都必需要经过学习集合类的源码只是才可以作到。

如何学习Java集合类

第一次接触

第一次接触集合类,想必你们的方式都差很少,应该就是用了一个叫作List的东西,以及它的子类ArrayList,经过它的api我基本上就能够了解它有哪些功能了,无非就是增删改查呗。

虽然这东西看起来没有什么难度,可是面试题里可不会直接问你它的api有哪些,刚好一次面试,面试官就问了我ArrayList相关的问题:ArrayList的底层数据结构是什么,它和linkedlist的区别是什么,它的扩容方式是怎么样的,它是线程安全的么,这些看起来很简单的问题,我当时一个都回答不上来。

在没有面试之前,你永远不知道本身学的其实很是少。

在第一次面试受到打击以后,我便决定开始面向面试复习,把这类问题通通找出来搞懂。

面向面试复习

既然咱们的目标是面试,那么就必需要搞懂面试题都喜欢考哪些集合类的问题。

因而,上网找面试题就成为一件重要的工做,我花了好几天的时间到网上搜刮了各种Java面试题,不论是BAT的面经,仍是网上整理比较详细的300道面试题,我都找来看了,虽然有不少重复的题目,可是大部分题目都是我没见过的。

原来Java集合类能够问出这么多问题来。

就拿ArrayList来讲,能够问数据结构,能够问扩容和一些方法的实现,也能够问你它和linkedlist、vector的区别,复杂一点的,甚至会问你线程安全的ArrayList是怎么实现的,删除它里面的某个元素应该如何删除。

看起来简单问题的背后,其实都有不少坑,我也是看了不少面试题解析以后才慢慢了解到的。

Java集合类里最常问的一类题目,无疑就是hashmap了,这玩意实在是太热门了。

hashmap的数据结构是怎么样的,1.8和之前有什么区别么,put方法和get又是怎么实现的,扩容是如何进行的,甚至还会问你具体的hash算法是怎么实现的。

更复杂的还有呢,并发工具类里的linkedhashmap和hashmap有何区别,它又是如何实现的呢,这就牵扯到不少并发编程的相关知识了,这部分咱们留着下次讲并发编程的内容时再来一块儿探讨。

看过足够多的集合类面试题,参加了足够多的面试以后,我彷佛对这些面试题已经无感了,毕竟熟读唐诗三百首,不会作诗也会吟啊,就这么几种题型,天天回答个三五遍,几个月里都忘不掉了。

可是,事情并无我想象的这么简单。虽然这些面试题多看几遍确实容易记住,可是记忆不能当饭吃,面试时万一想不出来那但是硬伤,更重要的是,不少时候,面试官问问题都不会按常理出牌,这些网上能找到的面试题,他们同样能够用别的方式不停地深挖,直到他了解到你的水平为止。

若是你只会简单地告诉面试官那些死记硬背的答案,而在他深挖集合类实现细节的时候没能答好的话,也是很扣分的,特别是对于美团、阿里这种Java大厂来讲,他们抠细节的能力绝对超出你的想象。

搞懂原理最重要

既然面向面试题复习的方式不必定老是奏效,那么有没有更加好的选择呢。

还真有,那就是,理解技术的实现原理。面试题是个好东西,可是咱们不能只停留在简单的一问一答上,并非说你搞懂了这个面试题的答案是什么就好了。
举个例子,好比说,Java中的hashmap的数据结构是什么样的,它的扩容方式又是如何的,这种时候,若是光是依靠面试题的答案去理解,多少会有一些片面。
你可能能够大概答出个三四点,可是其实你可能也没真正理解为何要这样作,或者实现细节是怎么样的。

实际上,要想真正了解hashmap的数据结构和实现原理,最好的办法就是去看源码,有的小伙伴确定会眉头一皱,源码这么复杂,看不懂怎么办,不要紧,本身看不懂,还可让别人教你呀,网上有不少源码解析的博客,我本身也整理了很多,发在我们的技术博客how2playlife.com上。

为何要看源码呢,好比hashmap,它的类定义里就已经展现了它的数据结构,咱们能够从中看出它是一个数组加链表的数据结构,这些成员变量都是在hashmap这个类里定义好的,而且,再看看它的put和get方法,你就能够知道它是如何插入和查询数据的,而且,在1.7和1.8源码比较的过程当中,你也能够更好地理解这两个版本源码的区别。

而对于扩容方法也是同样的,在hashmap的扩容方法中,你能够看到的是,hashmap为了把原来的数据搬到扩容后的数据结构中,就必需要进行从新哈希,调整每一个元素的索引和位置,这里面涉及了一系列算法,不看源码的话,你根本不知道扩容过程当中到底发生了什么。

当你看完源码,无论你遇到的是原来那些面试题,仍是有一些新的面试题,你总会发现其实都差很少,万变不离其宗,只要你理解了底层的实现以后,对于这些面试题应该都可以比较好地应付。

有些事,你必需要经历过,才能明白,有些坑,你不用本身去踩,由于我已经踩过了

推荐资源

书籍

实际上市面上并无针对Java集合类专门出的书籍,毕竟集合类只是JDK里的一小部分。

在以前那篇关于学习Java基础的文章里,我推荐给了你们一些书籍,里面也讲了不少关于集合类的东西。

《Java核心技术卷一》
《Java编程思想》

博客

Java技术仓库《Java程序员复习指南》

https://github.com/h2pl/Java-Tutorial

整合全网优质Java学习内容,帮助你从基础到进阶系统化复习Java。

个人我的博客:https://how2playlife.com/

社区:
CDSN我就不推荐了,反正百度大家搜一下也都是CSDN的结果

这里重点推荐两个社区,实打实的有不少干货,对文章要求比较高,个人不少文章质量都达不到他们的要求。

一、掘金
https://juejin.im/user/5b1d0d34e51d4506d936f561

二、开发者头条 https://toutiao.io/subjects/329410

总结

关于如何学习Java集合类,而且搞定相关面试题,咱们今天就讲到这里了,若是还有什么疑问也能够到我公众号里找我探讨,后续会有更多的文章推出,包括如何系统性地学习JavaWeb,如何系统性地学习Java核心技术和底层原理,以及如何系统性地学习后端技术。敬请期待。

对了,你想问我文章里提到的书籍和视频去哪找?我已经给你准备好了

文中提到的资源均可以避免费领取,在个人公众号【程序员黄小斜】回复“Java基础”便可免费领取对应的资源。

写在最后

若是以为本文对你有帮助的话,请你也不要吝啬你的“好看”哈,转发朋友圈就是对我最大的支持啦,大家的支持是对我最大的鼓励。

对本系列文章有什么建议和意见,也欢迎留言告诉我,期待你的回馈。另外本系列文章也会制做成相应的视频放到B站,赶忙来B站关注我吧。

微信公众号:程序员黄小斜
知乎:黄小斜
B站:黄小斜
相关文章
相关标签/搜索