java相关面试题总结+答案(代码片段)

tangjian07 tangjian07     2022-12-01     726

关键词:

【容器】


18. Java 容器都有哪些?

技术图片

19. Collection 和 Collections 有什么区别?

  • Collection 是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是它的子类,比如 List、Set 等。
  • Collections 是一个包装类,包含了很多静态方法,不能被实例化,就像一个工具类,比如提供的排序方法: Collections. sort(list)。

20. List、Set、Map 之间的区别是什么?

  List、Set、Map 的区别主要体现在两个方面:元素是否有序、是否允许元素重复。

  三者之间的区别,如下表:

  技术图片

21. HashMap 和 Hashtable 有什么区别? 

  • 存储:HashMap 允许 key 和 value 为 null,而 Hashtable 不允许。
  • 线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。
  • 推荐使用:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使用,推荐在单线程环境下使用 HashMap 替代,如果需要多线程使用则用 ConcurrentHashMap 替代。

22. 如何决定使用 HashMap 还是 TreeMap? 

  对于在 Map 中插入、删除、定位一个元素这类操作,HashMap 是最好的选择,因为相对而言 HashMap 的插入会更快,但如果你要对一个 key 集合进行有序的遍历,那 TreeMap 是更好的选择。

23. 说一下 HashMap 的实现原理?

  HashMap 基于 Hash 算法实现的,我们通过 put(key,value)存储,get(key)来获取。当传入 key 时,HashMap 会根据 key. hashCode() 计算出 hash 值,根据 hash 值将 value 保存在 bucket 里。当计算出的 hash 值相同时,我们称之为 hash 冲突,HashMap 的做法是用链表和红黑树存储相同 hash 值的 value。当 hash 冲突的个数比较少时,使用链表否则使用红黑树。(注:使用红黑树是在jdk1.8之后做的改进)

24. 说一下 HashSet 的实现原理? 

  HashSet 是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成,HashSet 不允许重复的值。

25. ArrayList 和 LinkedList 的区别是什么?

  • 数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。
  • 随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。
  • 增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。

  综合来说,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。

26. 如何实现数组和 List 之间的转换?

  • 数组转 List:使用 Arrays. asList(array) 进行转换。
  • List 转数组:使用 List 自带的 toArray() 方法。

代码示例:

// list to array
List<String> list = new ArrayList<String>();
list.add("akon");
list.add("blog");
list.toArray();
// array to list
String[] array = new String[]"akon","blog";
Arrays.asList(array);

27. ArrayList 和 Vector 的区别是什么?

  线程安全:Vector 使用了 Synchronized 来实现线程同步,是线程安全的,而 ArrayList 是非线程安全的。
  性能:ArrayList 在性能方面要优于 Vector。
  扩容:ArrayList 和 Vector 都会根据实际的需要动态的调整容量,只不过在 Vector 扩容每次会增加 1 倍,而 ArrayList 只会增加 50%。

28. Array 和 ArrayList 有何区别? 

  Array 可以存储基本数据类型和对象,ArrayList 只能存储对象。
  Array 是指定固定大小的,而 ArrayList 大小是自动扩展的。
  Array 内置方法没有 ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList 有。

29. 在 Queue 中 poll()和 remove()有什么区别? 

  相同点:都是返回第一个元素,并在队列中删除返回的对象。
  不同点:如果没有元素 poll()会返回 null,而 remove()会直接抛出 NoSuchElementException 异常。
代码示例:

Queue<String> queue = new LinkedList<String>();
queue.offer("string"); // add
System.out.println(queue.poll());
System.out.println(queue.remove());
System.out.println(queue.size());

30. 哪些集合类是线程安全的?

  Vector、Hashtable、Stack 都是线程安全的,而像 HashMap 则是非线程安全的,不过在 JDK 1.5 之后随着 Java. util. concurrent 并发包的出现,它们也有了自己对应的线程安全类,比如 HashMap 对应的线程安全类就是 ConcurrentHashMap。

31. 迭代器 Iterator 是什么?

  Iterator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移除元素。

32. Iterator 怎么使用?有什么特点? 

  Iterator 使用代码如下:

List<String> list = new ArrayList<>();
Iterator<String> it = list. iterator();
while(it. hasNext())
  String obj = it. next();
  System.out.println(obj);

  Iterator 的特点是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出 ConcurrentModificationException 异常。

33. Iterator 和 ListIterator 有什么区别?

Iterator 可以遍历 Set 和 List 集合,而 ListIterator 只能遍历 List。
Iterator 只能单向遍历,而 ListIterator 可以双向遍历(向前/后遍历)。
ListIterator 从 Iterator 接口继承,然后添加了一些额外的功能,比如添加一个元素、替换一个元素、获取前面或后面元素的索引位置。

34. 怎么确保一个集合不能被修改? 

  可以使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java.lang.UnsupportedOperationException 异常。

示例代码如下:

List<String> list = new ArrayList<>();
list.add("x");
Collection<String> clist = Collections.unmodifiableCollection(list);
clist.add("y"); // 运行时此行报错
System.out.println(list.size());

 

java相关面试题总结+答案

【JVM】194.说一下JVM的主要组成部分?及其作用?类加载器(ClassLoader)运行时数据区(RuntimeDataArea)执行引擎(ExecutionEngine)本地库接口(NativeInterface)组件的作用: 首先通过类加载器(ClassLoader)会把Java代码转换成字节码... 查看详情

101道经典javascript面试题总结(附答案,建议收藏)(代码片段)

...,本部分主要是作者在Github等各大论坛收录的JavaScript相关知识和一些相关面试题时所做的笔记,分享这份总结给大家,对大家对JavaScript的可以来一次全方位的检漏和排查。文章末尾有彩蛋!目录1.介绍js的基本数... 查看详情

101道经典javascript面试题总结(附答案,建议收藏)(代码片段)

...,本部分主要是作者在Github等各大论坛收录的JavaScript相关知识和一些相关面试题时所做的笔记,分享这份总结给大家,对大家对JavaScript的可以来一次全方位的检漏和排查。文章末尾有彩蛋!目录1.介绍js的基本数... 查看详情

java相关面试题总结+答案

【Spring/SpringMVC】90.为什么要使用spring?spring提供了IOC技术,spring容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象了,更轻松的实现了程序的解耦。spring提供了事务支持,使得事务操作变得更加方便。spring提供... 查看详情

纯干货分享!2020阿里java岗笔试面试题总结(附答案)(代码片段)

...言2020金九银十马上结束,现为大家整理了这次金九银十面试阿里的面试题总结,都是我从朋友那拿到的面试真题,话不多说,满满的干货分享给大家!inta=10是原子操作吗?是的。?注意点:i++(或++i)是非原子操作,i++是一个多步... 查看详情

java面试题及答案2020_java面试题答案1(代码片段)

java面试题及答案2020持续更新。。本文收集了一些经典的Java面试题及其答案1、面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象... 查看详情

java面试题⭐多线程篇⭐(万字总结,带答案,面试官问烂,跳槽必备,建议收藏)(代码片段)

个人主页:Java李小立后面会持续更新java面试专栏,请持续关注如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连❤️❤️❤️)面试宝典列表(持续更新):序号内容链接地址1Java基础篇(点击跳转)ja... 查看详情

java面试题⭐多线程篇⭐(万字总结,带答案,面试官问烂,跳槽必备,建议收藏)(代码片段)

个人主页:Java李小立后面会持续更新java面试专栏,请持续关注如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连❤️❤️❤️)面试宝典列表(持续更新):序号内容链接地址1Java基础篇(点击跳转)ja... 查看详情

备战面试面试题打卡——mysql相关面试题总结(代码片段)

⭐️写在前面这里是温文艾尔的学习之路👍如果对你有帮助,给博主一个免费的点赞以示鼓励把QAQ👋博客主页🎉温文艾尔的学习小屋⭐️更多文章👨‍🎓请关注温文艾尔主页📝🍅文章发布日期&... 查看详情

太牛了!5年来最火183个java面试题总结(含答案)(代码片段)

Java面试随着时间的改变而改变。在过去的日子里,当你知道String和StringBuilder的区别(String类型和StringBuffer类型的主要性能区别其实在于String是不可变的对象。因此在每次对String类型进行改变的时候其实都等同于生成了一... 查看详情

java面试题及答案2020,java理论知识总结(代码片段)

异步复制MySQL的复制默认是异步的,主从复制至少需要两个MYSQL服务,这些MySQL服务可以分布在不同的服务器上,也可以在同一台服务器上。MySQL主从异步复制是最常见的复制场景。数据的完整性依赖于主库BINLOG的不丢... 查看详情

java核心面试宝典day12“java虚拟机”相关面试题大总结(代码片段)

Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!用坚持缔造技术、用指尖敲动未来!和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改未来,改变世界!因为... 查看详情

java核心面试宝典day12“java虚拟机”相关面试题大总结(代码片段)

Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!用坚持缔造技术、用指尖敲动未来!和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改未来,改变世界!因为... 查看详情

2019年的面试经验总结-软件测试(代码片段)

...验。饭后,一个同事跟我说:“有空的话,能不能把相关经验梳理成文档发给我参考呀?”。当初回复他:“看吧,我之前是打算把面试题整理出来,后面有时间再整理经验吧”。周末有一个前同事也问我有没有时... 查看详情

我把面试问烂了的⭐java异常面试题⭐总结了一下(带答案,万字总结,精心打磨,建议收藏)(代码片段)

💂个人主页:Java程序鱼🤟整个Java体系的面试题我都会分享,大家可以持续关注💬如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦。💅有任何问题欢迎私信,看到会及时回复!序号内容链接... 查看详情

java程序员面试题大全含答案(2018--2019)

...案3、15个高级Java多线程面试题及回答4、2018年java分布式相关最新面试题5、2018最新java技术面试题与答案6、4个Spring常见面试题及答案解析7、css面试题及答案8、HR常问面试题总结(上)9、HR常问面试题总结(下)10、html面试题及... 查看详情

2022年java面试题最新整理,附白话答案(代码片段)

2022年Java开发面试题最新整理,附白话答案写在前面:本篇面试题整理是我在北京地区进行面试整理得出,常见的基本都在下面了。基本都是可以直接在面试时用白话回答的答案总结,面试时照此回答即可,有... 查看详情

2022最新版redis大厂面试题总结(附答案)

...JavaScript、HTML&CSS、Linux、Java、Golang、Linux和工具资源等相关理论知识、面试题和实战内容。文章导语大家好,前段时间一直在忙找工作相关的事情。最近工作稳定了,于是把面试过程中遇到的Redis相关知识问题总结下来 查看详情