Java集合(含面试大厂题含源码)
集合(Collection)是Java中一种非常核心的数据结构,它用于存储对象的集合。Java集合框架(Java Collections Framework)位于java.util
包下,提供了一套丰富的接口和实现,用于处理一组对象。下面是Java集合框架的一些基础知识点,以帮助你更好地理解和使用它。
集合框架的核心接口
-
Collection接口:是最基本的集合表示方式,它表示一组对象,这些对象也称为集合的元素。Collection接口有两个重要的子接口,分别是List和Set。
-
List接口:存储有序的集合。它可以包含重复的元素。List的元素可以通过索引(元素在List中的位置)访问。实现List接口的类主要有ArrayList、LinkedList等。
-
Set接口:存储唯一的元素,即不允许重复的元素。Set没有像List那样的索引。实现Set接口的类有HashSet、LinkedHashSet、TreeSet等。
-
Queue接口:代表了一个先进先出(FIFO)的队列。Queue接口的实现类如LinkedList(同时实现了List和Queue接口)、PriorityQueue等。
-
Map接口:不是Collection接口的子接口,但它也是集合框架的一部分。Map存储键值对(key-value pairs),其中每个键映射到一个值。实现Map接口的类有HashMap、LinkedHashMap、TreeMap等。
集合框架的特点
-
性能:不同的集合类有不同的性能特点。例如,ArrayList允许快速的随机访问,而LinkedList优化了元素的添加和删除。
-
顺序:某些集合类保证其元素的顺序(如List),而其他集合则不保证顺序(如Set)。
-
键值对:Map接口使用键值对存储元素。键是唯一的,而值可以重复。
使用集合框架的注意事项
-
选择合适的集合:根据需要存储的数据类型、数据量以及数据操作的性能要求选择最合适的集合类型。
-
泛型:使用集合时应尽可能使用泛型。泛型提供了编译时类型安全检查,这可以帮助避免运行时的ClassCastException。
-
并发修改异常:在遍历集合的同时尝试修改集合(除非使用迭代器的remove方法),可能会导致
ConcurrentModificationException
。 -
线程安全:大多数集合实现(如ArrayList、HashMap)不是线程安全的。如果在多线程环境中使用这些集合,需要外部同步或使用并发集合类(如ConcurrentHashMap)。
通过理解和掌握这些基础知识点,你将能够更有效地在Java程序中使用集合。### 题目1:实现一个基本的ArrayList功能
题目描述:
创建一个Java程序,实现一个简单的ArrayList。要求添加功能来添加元素,删除指定索引处的元素,以及打印当前列表中的所有元素。
源码示例:
import java.util.ArrayList;
import java.util.List;
public class SimpleArrayList {
public static void main(String[] args) {
List<String> myList = new ArrayList<>();
// 添加元素
myList.add("Java");
myList.add("Python");
myList.add("C++");
// 删除索引为1的元素
myList.remove(1);
// 打印所有元素
System.out.println("当前列表中的元素:");
for(String element : myList) {
System.out.println(element);
}
}
}
题目2:寻找两个数组的交集
题目描述:
编写一个Java方法,接收两个整数数组作为参数,返回这两个数组的交集。确保返回的数组中不包含重复元素,并按升序排列。
源码示例:
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class ArrayIntersection {
public static int[] findIntersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<>();
for(int num : nums1) {
set1.add(num);
}
Set<Integer> intersection = new HashSet<>();
for(int num : nums2) {
if(set1.contains(num)) {
intersection.add(num);
}
}
int[] result = new int[intersection.size()];
int i = 0;
for(int num : intersection) {
result[i++] = num;
}
Arrays.sort(result);
return result;
}
public static void main(String[] args) {
int[] nums1 = {1, 2, 2, 3};
int[] nums2 = {2, 2, 3, 4};
int[] result = findIntersection(nums1, nums2);
System.out.println("交集为:" + Arrays.toString(result));
}
}
题目3:使用HashMap统计字符频率
题目描述:
编写一个Java函数,接收一个字符串作为输入,并返回每个字符在字符串中出现的次数。使用HashMap来实现这个功能。
源码示例:
import java.util.HashMap;
import java.util.Map;
public class CharFrequency {
public static Map<Character, Integer> countCharFrequency(String str) {
Map<Character, Integer> frequencyMap = new HashMap<>();
for(char ch : str.toCharArray()) {
frequencyMap.put(ch, frequencyMap.getOrDefault(ch, 0) + 1);
}
return frequencyMap;
}
public static void main(String[] args) {
String str = "programming";
Map<Character, Integer> frequencyMap = countCharFrequency(str);
System.out.println("字符频率:");
for(Map.Entry<Character, Integer> entry : frequencyMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
这些题目覆盖了Java集合框架的基本使用,包括ArrayList
、HashSet
和HashMap
,以及一些基本的算法实现。通过这些练习,你可以加深对Java集合框架及其应用的理解。
原文地址:https://blog.csdn.net/2302_80314137/article/details/136792700
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!