-
ArrayList 和 Vector 的区别是什么?
-
插入数据时,ArrayList、LinkedList、Vector谁速度较快?阐述 ArrayList、Vector、LinkedList 的存储性能和特性?
-
多线程场景下如何使用 ArrayList?
-
为什么 ArrayList 的 elementData 加上 transient 修饰?
-
List 和 Set 的区别
-
Set接口
-
- 说一下 HashSet 的实现原理?
-
HashSet如何检查重复?HashSet是如何保证数据不可重复的?
-
HashSet与HashMap的区别
-
Queue
-
- BlockingQueue是什么?
-
在 Queue 中 poll()和 remove()有什么区别?
-
Map接口
-
- 说一下 HashMap 的实现原理?
-
HashMap在JDK1.7和JDK1.8中有哪些不同?HashMap的底层实现
-
- JDK1.8之前
-
JDK1.8之后
-
JDK1.7 VS JDK1.8 比较
-
HashMap的put方法的具体流程?
-
HashMap的扩容操作是怎么实现的?
-
HashMap是怎么解决哈希冲突的?
-
- 什么是哈希?
-
什么是哈希冲突?
-
HashMap的数据结构
-
hash()函数
-
JDK1.8新增红黑树
-
总结
-
能否使用任何类作为 Map 的 key?
-
为什么HashMap中String、Integer这样的包装类适合作为K?
-
如果使用Object作为HashMap的Key,应该怎么办呢?
-
HashMap为什么不直接使用hashCode()处理后的哈希值直接作为table的下标?
-
HashMap 的长度为什么是2的幂次方
-
HashMap 与 HashTable 有什么区别?
-
如何决定使用 HashMap 还是 TreeMap?
-
HashMap 和 ConcurrentHashMap 的区别
-
ConcurrentHashMap 和 Hashtable 的区别?
-
ConcurrentHashMap 底层具体实现知道吗?实现原理是什么?
-
辅助工具类
-
- Array 和 ArrayList 有何区别?
-
如何实现 Array 和 List 之间的转换?
-
comparable 和 comparator的区别?
-
Collection 和 Collections 有什么区别?
-
TreeMap 和 TreeSet 在排序时如何比较元素?Collections 工具类中的 sort()方法如何比较元素?
Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,MyBatis,数据库,中间件等,包含了作为一个Java工程师在面试中需要用到或者可能用到的绝大部分知识。欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章持续更新中…
| 序号 | 内容 | 链接地址 |
| — | — | — |
| 1 | Java基础知识面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104390612 |
| 2 | Java集合容器面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104588551 |
| 3 | Java异常面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104390689 |
| 4 | 并发编程面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104863992 |
| 5 | JVM面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104390752 |
| 6 | Spring面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104397516 |
| 7 | Spring MVC面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104397427 |
| 8 | Spring Boot面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104397299 |
| 9 | Spring Cloud面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104397367 |
| 10 | MyBatis面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/101292950 |
| 11 | Redis面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/103522351 |
| 12 | MySQL数据库面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104778621 |
| 13 | 消息中间件MQ与RabbitMQ面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104588612 |
| 14 | Dubbo面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104390006 |
| 15 | Linux面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104588679 |
| 16 | Tomcat面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104397665 |
| 17 | ZooKeeper面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104397719 |
| 18 | Netty面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/104391081 |
| 19 | 架构设计&分布式&数据结构与算法面试题(2020最新版) | https://thinkwon.blog.csdn.net/article/details/105870730 |
什么是集合
集合框架:用于存储数据的容器。
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。
任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编程语言中,接口通常用来形成规范。
实现:集合接口的具体实现,是重用性很高的数据结构。
算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现。事实上,算法是可复用的函数。
它减少了程序设计的辛劳。
集合框架通过提供有用的数据结构和算法使你能集中注意力于你的程序的重要部分上,而不是为了让程序能正常运转而将注意力于低层设计上。
通过这些在无关API之间的简易的互用性,使你免除了为改编对象或转换代码以便联合这些API而去写大量的代码。 它提高了程序速度和质量。
集合的特点
集合的特点主要有如下两点:
-
对象封装数据,对象多了也需要存储。集合用于存储对象。
-
对象的个数确定可以使用数组,对象的个数不确定的可以用集合。因为集合是可变长度的。
集合和数组的区别
-
数组是固定长度的;集合可变长度的。
-
数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
-
数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。
数据结构:就是容器中存储数据的方式。
对于集合容器,有很多种。因为每一个容器的自身特点不同,其实原理在于每个容器的内部数据结构不同。
集合容器在不断向上抽取过程中,出现了集合体系。在使用一个体系的原则:参阅顶层内容。建立底层对象。
使用集合框架的好处
-
容量自增长;
-
提供了高性能的数据结构和算法,使编码更轻松,提高了程序速度和质量;
-
允许不同 API 之间的互操作,API之间可以来回传递集合;
-
可以方便地扩展或改写集合,提高代码复用性和可操作性。
-
通过使用JDK自带的集合类,可以降低代码维护和学习新API成本。