Java集合面试题和答案(2024年收集更新)
2024年收集更新的Java集合面试题和答案,在 Java 中,面试官问的最多的问题是集合相关的问题。下面列出常被问到的集合问题和答案。
集合框架是类和接口的组合,用于以对象的形式存储和操作数据。它提供了ArrayList、Vector、Stack、HashSet等各种类和List、Queue、Set等接口。
完整答案
Array 和 Collection 在存储对象的引用和操作数据方面有些相似,但它们在很多方面有所不同。数组和集合之间的主要区别定义如下:
数组始终是固定大小的,即用户不能根据自己的需要或在运行时增加或减少数组的长度,但在 Collection 中,大小可以根据需要动态更改。数组只能存储同种或相似类型的对象,但在Collection中可以存储异构对象。数组不能提供现成的用户要求的方法,如排序、搜索等,但 Collection 包括现成的使用方法。
完整答案
Collection框架实现了各种接口,Collection接口和Map接口(java.util.Map)是Java Collection Framework主要使用的接口。Collection Framework的接口列表如下:
1、Collection接口: 集合(java.util.Collection)是主要接口,每个集合都必须实现这个接口。
语法:
public interface Collection<E>extends Iterable
其中<E>表示这个...
完整答案
ArrayList 和 Vector 有以下区别:
编号
ArrayList
Vector
1
ArrayList 不同步。
Vector是同步的。
2
ArrayList 不是遗留类。
Vector 是一个遗留类。
3
ArrayList 将其大小增加了数组大小的 50%。
Vector 通过将数组大小加倍来增加其大小。
4
ArrayList 不是线程安全的,因为它不同步。
Vector列表是线程安全的,因为它的每个方法都是同步的。
完整答案
ArrayList 和 LinkedList 有以下区别:
编号
ArrayList
LinkedList
1
ArrayList 使用动态数组。
LinkedList 使用双向链表。
2
ArrayList 操作效率不高,因为需要太多。
LinkedList 对操作很有效。
3
ArrayList 更适合存储和获取数据。
LinkedList 更适合操作数据。
4
ArrayList 提供随机访问。
LinkedList 不提供随机访问。
5
ArrayList ...
完整答案
Iterator 仅向前遍历元素,而 ListIterator 向前和向后遍历元素。
编号
Iterator
ListIterator
1
Iterator只在前向遍历元素。
ListIterator 向后和向前遍历元素。
2
Iterator 可以用在List、Set、Queue中。
ListIterator 只能在 List 中使用。
3
Iterator
只能在遍历集合时执行remove操作。
ListIterator 可以执行 add,remove,set 遍历集合...
完整答案
迭代器和枚举有以下区别:
编号
迭代器
枚举
1
Iterator可以遍历legacy和non-legacy元素。
枚举只能遍历遗留元素。
2
迭代器是快速失败的。
枚举不是快速失败的。
3
Iterator 比 Enumeration 慢。
枚举比迭代器快。
4
Iterator可以在遍历集合的同时进行remove操作。
Enumeration 只能对集合进行遍历操作。
完整答案
List 和 Set 都扩展了集合接口。但是,两者之间存在一些差异,如下所示:
List 可以包含重复的元素,而 Set 包含唯一的项目。List 是维护插入顺序的有序集合,而 Set 是不保留插入顺序的无序集合。List 接口包含一个遗留类,它是 Vector 类,而 Set 接口没有任何遗留类。List 接口可以允许 n 个null值,而 Set 接口只允许单个null值。
完整答案
HashSet 和 TreeSet 这两个类都实现了 Set 接口。下面列出了两者之间的区别。
HashSet 保持无序,而 TreeSet 保持升序。HashSet 由哈希表实现,而 TreeSet 由 Tree 结构实现。HashSet 的执行速度比 TreeSet 快。HashSet 由 HashMap 支持,而 TreeSet 由 TreeMap 支持。
完整答案
Set 和 Map 之间的区别如下所示:
Set 仅包含值,而 Map 包含键和值。Set 包含唯一值,而 Map 可以包含具有重复值的唯一键。Set 包含单个null值,而 Map 可以包含单个空键和 n 个null值。
完整答案
下面列出了 HashSet 和 HashMap 之间的区别:
HashSet 仅包含值,而 HashMap 包含条目(键,值)。HashSet是可以迭代的,但是HashMap需要转换成Set才能迭代。HashSet 实现了 Set 接口,而 HashMap 实现了 Map 接口HashSet 不能有任何重复值,而 HashMap 可以包含具有唯一键的重复值。HashSet 包含唯一的单个null值,而 HashMap 可以保存具有 n 个null值的单个null键。
完整答案
下面给出 HashMap 和 TreeMap 之间的区别:
HashMap 保持无序,而 TreeMap 保持升序。HashMap 是通过哈希表实现的,而 TreeMap 是通过 Tree 结构实现的。HashMap 可以按 Key 或 value 排序,而 TreeMap 可以按 Key 排序。HashMap 可能包含具有一个null值和多个null值,而 TreeMap 不能包含null键但可以具有多个null值。
完整答案
HashMap 和 Hashtable 有以下区别:
编号
HashMap
Hashtable
1
HashMap 不同步。
Hashtable是同步的。
2
HashMap 可以包含一个null键和多个null值。
Hashtable 不能包含任何null键或null值。
3
HashMap 不是线程安全的,所以它对非线程应用程序很有用。
Hashtable是线程安全的,可以在各个线程之间共享。
4
HashMap 继承 AbstractMap 类
Hashtable...
完整答案
下面给出集合和集合之间的区别:
Collection 是一个接口,而 Collections 是一个类。Collection 接口为 List、Set 和 Queue 提供数据结构的标准功能。但是,Collections 类是对集合元素进行排序和同步的。Collection 接口提供了可用于数据结构的方法,而 Collections 类提供了可用于对集合进行各种操作的静态方法。
完整答案
编号
Comparable
Comparator
1
Comparable 只提供一种序列。
Comparator 提供多种序列。
2
它提供了一种名为 compareTo() 的方法。
它提供了一种名为 compare() 的方法。
3
它位于 java.lang 包中。
它位于 java.util 包中。
4
如果实现 Comparable 接口,实际类被修改。
实际类没有改变。
完整答案
BlockingQueue 是一个扩展 Queue 接口的接口。它在检索、插入、删除等操作中提供并发性。在检索任何元素时,它会等待队列非空。在存储元素时,它会等待可用空间。BlockingQueue 不能包含空元素,BlockingQueue 的实现是线程安全的。
语法:
public interface BlockingQueue<E> extends Queue <E>
完整答案
如果更改属性文件中的值,则无需重新编译 java 类。因此,它使应用程序易于管理。它用于存储需要经常更改的信息。参考以下示例:
import java.util.*;
import java.io.*;
public class Test {
public static void main(String[] args)throws Exception{
FileReader reader=new FileReader("db.properties...
完整答案
hashCode()方法返回一个哈希码值(一个整数)。如果两个键(通过调用 equals() 方法)相同,则 hashCode()方法返回相同的整数。但是,两个哈希码可能具有不同或相同的密钥。如果两个对象通过使用 equals() 方法没有产生相等的结果,那么 hashcode() 方法将为两个对象提供不同的整数结果。
完整答案
equals()方法用于检查两个对象是否相同。如果想根据属性检查对象,则需要重写它。例如,Employee 是一个有 3 个数据成员的类:id、name 和salary。但是,想通过薪水检查员工对象的相等性。那么需要重写 equals() 方法。
完整答案
Collections 类提供了使 List、Set 或 Map 元素同步的方法:
public static List synchronizedList(List l){}
public static Set synchronizedSet(Set s){}
public static SortedSet synchronizedSortedSet(SortedSet s){}
public static Map synchronizedMap(Map m){}
public static S...
完整答案
使用泛型集合有三个主要优点:
如果使用泛型类,我们不需要类型转换。它是类型安全的,并在编译时进行检查。Generic通过在编译时检测到错误来确认代码的稳定性。
完整答案
具有相同哈希值的两个不同键称为哈希冲突。两个单独的条目将保存在一个哈希桶中以避免冲突。有两种方法可以避免哈希冲突。
分离链开放寻址
完整答案
Dictionary 类提供了存储键值对的能力。
完整答案
负载因子的默认大小为 0.75。默认容量计算为初始容量 * 负载因子。例如,16 * 0.75 = 12。所以,12 是 Map 的默认容量。
完整答案
如果发生任何结构修改,Java 中立即抛出 ConcurrentmodificationException 的 Iterator 称为 Fail-fast 迭代器。Fail-fats 迭代器不需要任何额外的内存空间。
完整答案
下面给出了 Array 和 ArrayList 之间的主要区别。
SN
Array
ArrayList
1
数组是固定大小的,这意味着我们不能根据需要调整数组的大小。
ArrayList 不是固定大小的,可以动态改变大小。
2
数组是静态类型的。
ArrayList 是动态大小的。
3
数组可以存储原始数据类型以及对象。
ArrayList 不能存储原始数据类型,它只能存储对象。
完整答案
下面给出了 Array 和 ArrayList 之间的主要区别。
SN
Array
ArrayList
1
数组是固定大小的,这意味着我们不能根据需要调整数组的大小。
ArrayList 不是固定大小的,可以动态改变大小。
2
数组是静态类型的。
ArrayList 是动态大小的。
3
数组可以存储原始数据类型以及对象。
ArrayList 不能存储原始数据类型,它只能存储对象。
完整答案
数组的长度可以通过length属性获取,ArrayList不支持length属性,但是可以使用size()方法来获取列表中对象的个数。
查找数组的长度 -
Int [] array = new int[4];
System.out.println("The size of the array is " + array.length);
查找 ArrayList 的大小 -
ArrayList<String> list=new ArrayList<St...
完整答案
可以使用 Arrays 类的 asList() 方法将 Array 转换为 ArrayList。asList() 方法是 Arrays 类的静态方法,接受 List 对象。参考以下语法:
Arrays.asList(item)
可以使用 ArrayList 类的 toArray() 方法将 ArrayList 转换为 Array。请参考以下语法将 ArrayList 转换为 List 对象。
List_object.toArray(new String[List_object.size()])...
完整答案
可以通过调用 Collections.unmodifiableCollection() 方法获取 java ArrayList 只读。当将 ArrayList 定义为只读时,无法通过 add()、remove() 或 set() 方法对集合进行任何修改。
完整答案
有两种方法可以从 ArrayList 中删除重复项:
使用HashSet: 通过使用 HashSet,可以从 ArrayList 中删除重复元素,但它不会保留插入顺序。使用LinkedHashSet: 还可以使用 LinkedHashSet 代替 HashSet 来维护插入顺序。
使用 LinkedHashSet 从 ArrayList 中删除重复元素的过程:
将 ArrayList 的所有元素复制到 LinkedHashSet。使用 clear() 方法清空 ArrayList,这将删除列...
完整答案
要反转 ArrayList,可以使用 Collections 类的 reverse() 方法。参考以下示例:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class ReverseArrayList {
public static ...
完整答案
要对 ArrayList 进行降序排序,可以使用 Collections 类的 reverseOrder 方法。参考以下示例:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
public ...
完整答案
可以通过两种方式同步 ArrayList。
使用 Collections.synchronizedList() 方法;使用 CopyOnWriteArrayList<T>;
完整答案
LinkedLists 更适合用于更新操作,而 ArrayLists 更适合用于搜索操作。
完整答案