在 Java 中, JDK 1.2中引入了 Collection Framework
,其中包含所有集合类和接口。
Java Collection
是一个框架,提供了存储和操作对象集合的机制。它允许开发人员访问预先打包的数据结构和算法来操作数据。
在本文中,我们涵盖了前 50 个 Java 集合面试问题,其答案涵盖了从基本 Java 集合到高级 Java 集合概念(例如导航集合、WeakHashMap
、流和 Lambda
等)的所有内容。
无论您是新手还是经验丰富的人Java 开发人员,本文为您提供了在下一次基于 Java
的技术面试中取得好成绩所需的全部信心。
Java 集合面试题
新手 Java 面试题集
1.Java中的集合是什么?
术语“集合”是指表示为一个单元的一组对象。Java集合类层次结构中的类分为两个“根”接口:Collection (java.util.Collection)和Map (java.util.Map)。在学习 Java 集合时您会遇到的术语:
- 集合框架:
Java
的集合框架定义了用于将对象组表示为单个实体的类和接口。如果C++
开发人员有C++
背景,则可以将Collection
框架与STL
(标准模板库)进行比较,将Container Framework
与Collection
框架进行比较。 - 集合接口:类的接口指定它应该做什么,而不是如何做。换句话说,它是班级的蓝图。此接口为属于集合框架的所有集合对象提供最常用的方法。或者,它代表单个对象作为一个整体。
- Collections类:
Collection
框架的成员,它是java.util
包的一部分。此类中为集合对象提供了许多实用方法。
2. Java中的框架是什么?
框架是提供现成架构的类和接口集。没有必要定义一个框架来实现新的功能或类。
因此,最佳的面向对象设计包括一个框架,该框架包含所有执行类似任务的类的集合。该框架可以通过多种方式使用,例如调用其方法、扩展它以及提供“回调”、侦听器和其他实现。Java 中一些流行的框架是:
- Spring
- Hibernate
- Struts
- Google Web Toolkit (GWT)
- JavaServer Faces (JSF)
3.Java中Array和Collection
有什么区别?
数组是 Java 中具有通用名称的相似类型变量的集合。Java 和 C/C++ 中的数组之间存在一些差异。另一方面,集合是单个对象的组,它们形成称为对象集合的单个实体。
Arrays(数组) | Collection (集合) |
数组的大小是固定的,一旦我们创建了数组,我们就不能根据我们的要求增加或减少。 | 该系列本质上是可生长的,并且基于我们的要求。我们可以增加或减少尺寸。 |
关于内存,不建议使用数组。 | 关于内存,建议使用集合。 |
从性能角度考虑,推荐使用数组。 | 从性能上来说,不建议使用集合。 |
数组只能保存同类数据类型的元素。 | 集合可以容纳同质和异质元素。 |
4. Java Collections Framework 中使用了哪些接口?
该集合被称为集合层次结构的根。集合表示称为元素的对象组。java 平台不提供该接口的任何直接实现,但 Collection 接口由 List 和 Set 类实现。
- Collection interface 采集接口
- List interface 列表接口
- Set interface 设置接口
- Queue interface 队列接口
- Dequeue interface 出队接口
- Map interface Hash 接口
5.解释Java中Collection框架的层次结构。
集合框架所需的所有类和接口都包含在实用程序包(java.util)中。集合框架有一个称为可迭代接口的接口,它允许迭代器迭代所有集合。除了该接口之外,主集合接口还充当集合框架的根。所有集合都扩展了该集合接口,从而扩展了迭代器的属性和该接口的方法。下图说明了集合框架的层次结构。
Java集合层次结构
6. 集合框架有哪些优点?
集合框架的优点:由于缺乏集合框架导致了上述一系列缺点,因此以下是集合框架的优点。
- 一致的 API: API 具有一组基本接口,如Collection、Set、List或Map,实现这些接口的所有类(ArrayList、LinkedList、Vector 等)都有一些通用方法集。
- 减少编程工作:程序员不必担心集合的设计,而是可以专注于其在程序中的最佳使用。因此,面向对象编程的基本概念(即抽象)已经成功实现。
- 提高程序速度和质量:通过提供有用的数据结构和算法的高性能实现来提高性能,因为在这种情况下,程序员不需要考虑特定数据结构的最佳实现。他可以简单地使用最好的实现来极大地提高他的算法/程序的性能。
7.Java中的ArrayList是什么?
ArrayList是Java集合框架的一部分,是java.util包中的一个类。它为我们提供了Java中的动态数组。ArrayList的主要优点是,如果我们声明一个数组,那么就需要指定大小,但是在ArrayList中,不需要指定ArrayList的大小,如果你想指定大小就可以做到。
数组列表的图像
8. Collection
和Collections
有什么区别?
| |
它是一个接口。 | 它是一个实用程序类。 |
它用于将一组单独的对象表示为一个单元。 | 它定义了几个用于操作集合的实用方法。 |
Collection是一个从java8.0开始包含静态方法的接口。接口还可以包含抽象方法和默认方法。 | 它仅包含静态方法。 |
9、java集合框架中ArrayList和LinkedList的区别?
数组列表和链表
ArrayList 数组列表 | LinkedList 链表 |
该类使用动态数组来存储其中的元素。随着泛型的引入,该类支持所有类型对象的存储。 | 该类使用双向链表来存储其中的元素。与ArrayList类似,该类也支持所有类型对象的存储。 |
由于内部实现,操作 ArrayList 需要更多时间。每当我们删除一个元素时,都会在内部遍历数组并移动内存位。 | 与 ArrayList 相比,操作 LinkedList 花费的时间更少,因为在双向链表中,不存在移动内存位的概念。遍历列表并更改参考链接。 |
该类实现了List接口。因此,这相当于一个列表。 | 该类同时实现了List接口和Deque接口。因此,它可以充当列表和双端队列。 |
当应用程序需要存储和访问数据时,此类效果更好。 | 当应用程序需要操作存储的数据时,此类效果更好。 |
10.什么是迭代器?
Java的Collection框架使用迭代器来一一检索元素。该迭代器是通用的,因为它可以与任何类型的 Collection 对象一起使用。使用Iterator,我们可以执行读取和删除操作。这是枚举的改进版本,添加了删除元素。在枚举所有 Collection 框架实现的接口中的元素时,例如 Set、List、Queue、Deque 以及 Map 的所有实现类,都必须使用 Iterator。整个集合框架唯一可用的游标是迭代器。使用 Collection 接口中的 iterator() 方法,您可以创建迭代器对象。
句法:
Iterator itr = c.iterator();
注意:这里的“c”是任何 Collection 对象。itr 是 Iterator 接口类型,引用“c”。