Java核心技术及面试指南 集合部分总的面试题归纳以及答案
3.6.1ArrayList和LinkedList有什么差别?在哪种场景里应当用ArrayList(或LinkedList)?
大家如果学过数据结构,这个问题不难回答:前者是基于数组,数组比较擅长索引查找,但不擅长被频繁地插入或删除;后者是基于链表,它擅长被频繁地插入或删除,如果对其频繁地进行索引查找,就会影响性能。
3.6.2 ArrayList和Vector有什么差别?
我们知道,ArrayList是线程不安全的,而且会以大概50%的规模进行动态扩容;而Vector是线程安全的,它会以100%的规模进行动态扩容。所以在单线程环境下,出于性能和内存使用量这两方面的考虑,建议使用ArrayList。
3.6.3 HashSet和TreeSet有什么差别?
我们在3.2.4部分具体分析过它们的差别,这里就不再重叙。
3.6.4 我们知道,Set里不允许插入重复的元素。对于HashSet和TreeSet,如果我们要插入自定义的类,我们该往自定义的类里加入什么方法来保证“不重复”?
对于HashSet,它是基于Hash表的,我们需要重写其中的hashCode和equals方法;对于TreeSet,我们需要重写compareTo方法(当然还得实现Compareable接口)。具体的细节请大家阅读3.2.3部分。
在大多数场景下,我们是会放入自定义类型,而不是简单数据类型。如果候选人不知道怎么回答,那么我就可以认定他只是“简单地用到了集合”,而不是“对集合有深入的了解”。
3.6.5 在使用迭代器遍历集合对象时,我们能不能边访问边修改?如果这样做,会有什么问题?
我们在3.2.6部分里讲过这个知识点。如果被问到这个问题,大家可以这样说:第一,会报异常,因为使用迭代器时不能边访问边修改;第二,这种异常其实是种保护机制,因为边遍历边修改会增加出错的机会;第三,如果确实需要这样做,可以使用CopyOnWriteArrayList之类的集合,或者干脆别通过迭代器来访问集合对象。
3.6.6 在使用HashMap时,你有没有重写hashCode和equals方法,如果不重写,会有什么问题?如果候选人对此一脸雾水,那么我会给点提示:如果我们要在HashMap的Key部分放入自定义的类,而不是基本数据结构,那么我们该在这个自定义的类里重写什么方法?
如果大家被问到这个问题,可以好好利用这个机会来展示你对此的深入了解。
要点1,HashMap是基于hash表这个数据结构来实现的,所以其中的get或containsKey的效率相当高(接近于1)。
要点2,描述一下Hash表的数据结构,重点说说如何通过hash算法把待存入的数据和存储位置绑定到一起了,同时还可以说出HashMap表里是通过链地址法来解决冲突。
要点3,hashCode方法其实是对应hash表里的hash算法,由此我们可以计算出待存储元素的存放位置。如果我们不重写,将会用到Object里的hashCode方法,它是返回该对象的内存地址;而如果我们不重写equals方法,那么在冲突的情况下,就无法定位到具体的对象了。总之,如果不重写hashCode和equals方法,在调用containsKey和get方法时,就无法得到“看上去一致”的对象了。
如果面试官(也包括笔者)看到应试者能清晰地说出上述的意思,就认为此人对技术细节非常了解,就有可能减少集合部分(或者乃至Java Core部分)的面试题。如果大家也是这样并在回答其它问题时不犯原则性的错误,那么也可能得到“对技术了解比较透彻”之类的好评。
3.6.7 Collections和Collection有什么差别?
Collections 是一个集合的一个类,其中包含有一些和集合操作相关的静态多态方法。Jave集合里则有另外一个和它非常相似的接口Collection(不带s),它是线性表类集合的父接口,List和Set等接口都是通过实现这个接口来实现的。
3.6.8 如果我们要给自定义的类排序,可以怎么做?
大家可以阅读3.4.1部分,我们可以通过重写Collections.sort的方法来实现。
在3.4部分,我们详细讲了如何通过Collection的方法实现排序和线程安全。请大家找机会,向面试官说出你用过这些方法;因为一旦证明你用过,面试官就会感觉你对集合部分用得比较深入。
3.6.9你有没有用过T,?, super和extends这种泛型?
说实在的,上述泛型在实际的项目里用得还真不多,你如果说没用过,面试官也不会难为你。不过大家可以结合3.5.1部分的知识点,向面试官说明你是怎么把泛型作用到类和方法上,也可以结合3.5.2里描述的copy方法向面试官说明? extends和? super的用法,如此面试官就会认为你对集合部分的知识掌握得很透彻。
Java核心技术及面试指南 集合部分总的面试题归纳以及答案的更多相关文章
- Java核心技术及面试指南 IO部分的面试题归纳以及答案
4.6.1 java中有几种类型的流? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStr ...
- Java核心技术及面试指南 异常部分的面试题归纳以及答案
4.2.4.1 throw和throws有什么差别?异常(Exception)和错误(Error)有什么差别? throw语句表示抛出异常,由方法体内的语句处理.throws语句用在方法声明后面,表示 ...
- Java核心技术及面试指南 JDBC部分的面试题总结以及答案
5.5.1 你最近的项目里用到的是哪个数据?或你用过哪些数据库?或你对哪个数据库最熟悉? 通过这个问题,我们将会确认候选人是否在项目里用过数据库或JDBC. 5.5.2 你有没有建过表?或修改表里的字 ...
- Java核心技术及面试指南 数据库方面的面试题归纳以及总结
5.1.7.1 事务的四大特性是什么? ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库 ...
- Java核心技术及面试指南 设计模式部分的面试题总结以及答案
8.6.4.1请实现一个线程安全的单例模式. 1 public class MailListReader { 2 private static MailListReader ...
- Java核心技术及面试指南 面向对象部分的面试题总结以及答案
问题2.7.1,开放性问题,说一下你对面向对象思想的了解. 要点1,先说基础概念,比如面向对象思想包括封装.继承.多态,然后说些语法,比如可以通过extends继承类.通过implement来实现接口 ...
- Java核心技术及面试指南 多线程部分的基本面试题总结以及答案
7.1.5 (1) 如果某个类已经继承(extends)了一个类,那么让这个类具有多线程的特性? implements runnable类或通过线程池 7.1.5 (2)启动一个线程是用run()还 ...
- Java核心技术及面试指南:视频列表
如下是本书相关内容的视频列表,会动态更新 第一章 1 视频1.1 JDK和JRE和JVM的区别,安装Java开发环境 1.1.1 第2页 2 视频1.2 编写第一个HelloWorld程序 ...
- Java核心技术及面试指南的视频讲解和代码下载位置
都是百度云盘,均无密码 代码下载位置: https://pan.baidu.com/s/1I44ob0vygMxvmj2BoNioAQ 视频讲解位置: https://pan.baidu.com/s/ ...
随机推荐
- 【转】async & await 的前世今生(Updated)
async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...
- ORB-SLAM2的安装和运行流程
一.ORB-SLAM2安装 1.在https://github.com/raulmur/ORB_SLAM2上git clone到当前文件夹内,若想下载到指定文件夹内,就需要cd进入指定文件内,然后再g ...
- Windows 10 专业版 长期服务版 激活
这个用小白系统之后一段时间显示要求激活,或者更改产品秘钥.网上找了许多秘钥也是没啥用,又不想用激活工具的话,可以试试用win+R 输入cmd : 依次输入:slmgr /skms kms.digibo ...
- H5新特性-视频,音频-Flash-canvas绘图
json格式 json - > AJAX json:数据格式,通常是以字符串形式表示 对象 {"name":"james","age" ...
- 给div"上"滑动条
最近做项目时修改一个遗留的bug,大概是这样:有一个聊天窗口,用户聊天内容展现在窗口上.其实这个窗口是一个带滑动条的div,随着聊天内容的添加,滑动条也越来越长了,这不是重点,重点是每次刷新窗口时候, ...
- poi实现Excel文件的读取
1.前端代码 $("#upload").on('click', function() { var formData = new FormData(); var name = $(& ...
- (27)How to stay calm when you know you'll be stressed
https://www.ted.com/talks/daniel_levitin_how_to_stay_calm_when_you_know_you_ll_be_stressed00:12A few ...
- maven 编码 UTF-8 的不可映射字符
maven编译时报错,后面发现代码是用GBK编码编写,maven默认是用utf-8来编译.修改pom.xml <build> <plugins> <plugin> ...
- @RequestParam与@PathVariable
@PathVariable 带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义 通过 @PathVariable 可以 ...
- JAVA Bean和XML之间的相互转换 - XStream简单入门
JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...