【金三银四】Java集合面试题(2021最新版)

目录

前言

一、集合容器概述

1. 什么是集合

2. 集合的特点

3. 集合和数组的区别

4. 使用集合框架的好处

5. 常用的集合类有哪些?

6. List,Set,Map三者的区别?

7. 集合框架底层数据结构

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

9. Java集合的快速失败机制 “fail-fast”?

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

List接口

11. 迭代器 Iterator 是什么?

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

13. 如何边遍历边移除 Collection 中的元素?

14. Iterator 和 ListIterator 有什么区别?

15. 遍历一个 List 有哪些不同的方式?每种方法的实现原理是什么?Java 中 List 遍历的最佳实践是什么?

16. 说一下 ArrayList 的优缺点

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

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

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

20. 插入数据时,ArrayList、LinkedList、Vector谁速度较快?阐述 ArrayList、Vector、LinkedList 的存储性能和特性?

21. 多线程场景下如何使用 ArrayList?

22. 为什么 ArrayList 的 elementData 加上 transient 修饰?

23. List 和 Set 的区别

Set接口

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

25. HashSet如何检查重复?HashSet是如何保证数据不可重复的?

26. HashSet与HashMap的区别

三、Map接口

27. 什么是Hash算法

28. 什么是链表

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

30. HashMap在JDK1.7和JDK1.8中有哪些不同?HashMap的底层实现

31. 什么是红黑树

32. HashMap的put方法的具体流程?

33. HashMap的扩容操作是怎么实现的?

34. HashMap是怎么解决哈希冲突的?

35. 能否使用任何类作为 Map 的 key?

36. 为什么HashMap中String、Integer这样的包装类适合作为K?

37. 如果使用Object作为HashMap的Key,应该怎么办呢?

38. HashMap为什么不直接使用hashCode()处理后的哈希值直接作为table的下标?

39. HashMap 的长度为什么是2的幂次方

40. HashMap 与 HashTable 有什么区别?

41. 什么是TreeMap 简介

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

43. HashMap 和 ConcurrentHashMap 的区别

44. ConcurrentHashMap 和 Hashtable 的区别?

45. ConcurrentHashMap 底层具体实现知道吗?实现原理是什么?

四、辅助工具类

46. Array 和 ArrayList 有何区别?

47. 如何实现 Array 和 List 之间的转换?

48. comparable 和 comparator的区别?

49. Collection 和 Collections 有什么区别?

50. TreeMap 和 TreeSet 在排序时如何比较元素?Collections 工具类中的 sort()方法如何比较元素?

51. Collection 和 Collections 有什么区别?

最后


前言

马上到今年的金三银四了,又是跳槽的好季节,准备跳槽的同学都摩拳擦掌准备大面好几场,本次小编为大家准备了精选的 Java 集合面试题,快来查漏补缺吧。

小编分享的这份金三银四Java后端开发面试总结包含了JavaOOP、Java集合容器、Java异常、并发编程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL数据库、消息中间件MQ、Dubbo、Linux、ZooKeeper、 分布式&数据结构与算法等26个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有很多粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到大家!【持续更新中!】

完整版Java面试题地址:2021最新面试题合集集锦

序号 专题 内容 链接地址
1 中间件 【金三银四】Java中间件面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/114002362
2 微服务 【金三银四】Java微服务面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/113923549
3 并发编程 【金三银四】Java并发编程面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/113895576
4  Java基础 【金三银四】Java基础知识面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115146056
5 Spring Boot 【金三银四】Spring Boot面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115186811
6  Redis 【金三银四】Redis面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115188010
7  Spring MVC 【金三银四】Spring MVC面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115220638
8 Spring Cloud 【金三银四】Spring Cloud面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115220987
9 MySQL优化 【金三银四】MySQL优化面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115254620
10 JVM 【金三银四】JVM性能调优面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115283079
11 Linux 【金三银四】Linux面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115283583
12 Mybatis 【金三银四】Mybatis面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115285732
13 网络编程 【金三银四】TCP,UDP,Socket,Http网络编程面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115464896
14 设计模式 【金三银四】设计模式面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115466449
15 大数据 金三银四】大数据面试题100道(2021最新版) https://blog.csdn.net/SQY0809/article/details/115484939
16 Tomcat 【金三银四】Tomcat面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115486648
17 多线程 【金三银四】多线程面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115487212
18 Nginx 【金三银四】Nginx_BIO_NIO_AIO面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115488446
19 memcache 【金三银四】memcache面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115494213
20 java异常 【金三银四】java异常面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115530401
21 Java虚拟机 【金三银四】Java虚拟机面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115532365
22 Java集合 【金三银四】Java集合面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115599284
23 Git常用命令 【金三银四】Git常用命令(2021最新版) https://blog.csdn.net/SQY0809/article/details/115602390
24 Elasticsearch 【金三银四】Elasticsearch面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115604293
25 Dubbo 【金三银四】Dubbo面试题(2021最新版) https://blog.csdn.net/SQY0809/article/details/115605560


一、集合容器概述

1. 什么是集合

  • 集合就是一个放数据的容器,准确的说是放数据对象引用的容器
  • 集合类存放的都是对象的引用,而不是对象的本身
  • 集合类型主要有3种:set(集)、list(列表)和map(映射)

2. 集合的特点

集合的特点主要有如下两点:

  • 集合用于存储对象的容器,对象是用来封装数据,对象多了也需要存储集中式管理。
  • 和数组对比对象的大小不确定。因为集合是可变长度的。数组需要提前定义大小

3. 集合和数组的区别

  • 数组是固定长度的;集合可变长度的。
  • 数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
  • 数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。

4. 使用集合框架的好处

1. 容量自增长;

2. 提供了高性能的数据结构和算法,使编码更轻松,提高了程序速度和质量;

3. 可以方便地扩展或改写集合,提高代码复用性和可操作性。

4. 通过使用JDK自带的集合类,可以降低代码维护和学习新API成本。

5. 常用的集合类有哪些?

Map接口和Collection接口是所有集合框架的父接口:
  • 1. Collection接口的子接口包括:Set接口和List接口
  • 2. Map接口的实现类主要有:HashMapTreeMapHashtableConcurrentHashMap以及Properties等
  • 3. Set接口的实现类主要有:HashSetTreeSetLinkedHashSet
  • 4. List接口的实现类主要有:ArrayListLinkedListStack以及Vector

6. List,Set,Map三者的区别?

7. 集合框架底层数据结构

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

  • Vector:就比Arraylist多了个 synchronized (线程安全),因为效率较低,现在已经不太建议使用。
  • hashTable:就比hashMap多了个synchronized (线程安全),不建议使用。
  • ConcurrentHashMap:是Java5中支持高并发、高吞吐量的线程安全HashMap实现。它由Segment数组结构和HashEntry数组结构组成。Segment数组在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键-值对数据。一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构;一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素;每个Segment守护着一个HashEntry数组里的元 素,当对HashEntry数组的数据进行修改时,必须首先获得它对应的Segment锁。(推荐使用)

9. Java集合的快速失败机制 “fail-fast”?

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

  • 可以使用 Collections. unmodififiableCollection(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());

二、Collection接口

List接口

11. 迭代器 Iterator 是什么?

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

Iterator 使用代码如下:

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

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

13. 如何边遍历边移除 Collection 中的元素?

14. Iterator 和 ListIterator 有什么区别?

  • Iterator 可以遍历 Set List 集合,而 ListIterator 只能遍历 List
  • Iterator 只能单向遍历,而 ListIterator 可以双向遍历(向前/后遍历)。
  • ListIterator 实现 Iterator 接口,然后添加了一些额外的功能,比如添加一个元素、替换一个元素、获取前面或后面元素的索引位置。
  • 14
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值