自学内容网 自学内容网

Java集合(含面试大厂题含源码)

集合(Collection)是Java中一种非常核心的数据结构,它用于存储对象的集合。Java集合框架(Java Collections Framework)位于java.util包下,提供了一套丰富的接口和实现,用于处理一组对象。下面是Java集合框架的一些基础知识点,以帮助你更好地理解和使用它。

集合框架的核心接口

  1. Collection接口:是最基本的集合表示方式,它表示一组对象,这些对象也称为集合的元素。Collection接口有两个重要的子接口,分别是List和Set。

  2. List接口:存储有序的集合。它可以包含重复的元素。List的元素可以通过索引(元素在List中的位置)访问。实现List接口的类主要有ArrayList、LinkedList等。

  3. Set接口:存储唯一的元素,即不允许重复的元素。Set没有像List那样的索引。实现Set接口的类有HashSet、LinkedHashSet、TreeSet等。

  4. Queue接口:代表了一个先进先出(FIFO)的队列。Queue接口的实现类如LinkedList(同时实现了List和Queue接口)、PriorityQueue等。

  5. 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集合框架的基本使用,包括ArrayListHashSetHashMap,以及一些基本的算法实现。通过这些练习,你可以加深对Java集合框架及其应用的理解。


原文地址:https://blog.csdn.net/2302_80314137/article/details/136792700

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!