Java Collections工具类面试题

Java Collections工具类面试题

基本操作

Q1: Collections工具类提供了哪些常用的集合操作方法?

java 复制代码
public class CollectionsBasicExample {
    public void demonstrateBasicOperations() {
        List<Integer> list = new ArrayList<>();
        
        // 1. 添加元素
        Collections.addAll(list, 1, 2, 3, 4, 5);
        
        // 2. 排序操作
        Collections.sort(list);                     // 自然排序
        Collections.sort(list, Collections.reverseOrder()); // 反向排序
        Collections.reverse(list);                  // 反转
        Collections.shuffle(list);                  // 随机排序
        Collections.rotate(list, 2);               // 旋转
        
        // 3. 查找和替换
        int max = Collections.max(list);           // 最大值
        int min = Collections.min(list);           // 最小值
        int frequency = Collections.frequency(list, 1); // 元素出现次数
        Collections.replaceAll(list, 1, 10);       // 替换所有指定元素
        Collections.fill(list, 0);                 // 填充
        
        // 4. 二分查找
        Collections.sort(list);  // 二分查找前需要排序
        int index = Collections.binarySearch(list, 3);
    }
}

Q2: Collections工具类如何实现集合的线程安全?

java 复制代码
public class CollectionsSynchronizationExample {
    public void demonstrateSynchronization() {
        // 1. 线程安全的List
        List<String> list = new ArrayList<>();
        List<String> syncList = Collections.synchronizedList(list);
        
        // 2. 线程安全的Set
        Set<String> set = new HashSet<>();
        Set<String> syncSet = Collections.synchronizedSet(set);
        
        // 3. 线程安全的Map
        Map<String, String> map = new HashMap<>();
        Map<String, String> syncMap = Collections.synchronizedMap(map);
        
        // 4. 正确的遍历方式
        synchronized (syncList) {
            Iterator<String> i = syncList.iterator();
            while (i.hasNext())
                System.out.println(i.next());
        }
        
        // 5. 并发修改示例
        List<String> synchronizedList = Collections.synchronizedList(new ArrayList<>());
        synchronizedList.add("one");
        synchronizedList.add("two");
        
        // 错误的方式:可能抛出ConcurrentModificationException
        try {
            for (String element : synchronizedList) {
                synchronizedList.remove(element);
            }
        } catch (ConcurrentModificationException e) {
            System.out.println("并发修改异常");
        }
        
        // 正确的方式:使用迭代器的remove方法
        synchronized (synchronizedList) {
            Iterator<String> iterator = synchronizedList.iterator();
            while (iterator.hasNext()) {
                iterator.next();
                iterator.remove();
            }
        }
    }
}

不可变集合

Q3: Collections如何创建不可变集合?

java 复制代码
public class ImmutableCollectionsExample {
    public void demonstrateImmutableCollections() {
        // 1. 空集合
        List<String> emptyList = Collections.emptyList();
        Set<String> emptySet = Collections.emptySet();
        Map<String, String> emptyMap = Collections.emptyMap();
        
        // 2. 单元素集合
        Set<String> singleton = Collections.singleton("one");
        Map<String, String> singletonMap = 
            Collections.singletonMap("key", "value");
        
        // 3. 不可修改的集合
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        List<String> unmodifiableList = 
            Collections.unmodifiableList(list);
        
        Set<String> set = new HashSet<>();
        set.add("one");
        Set<String> unmodifiableSet = 
            Collections.unmodifiableSet(set);
        
        Map<String, String> map = new HashMap<>();
        map.put("key", "value");
        Map<String, String> unmodifiableMap = 
            Collections.unmodifiableMap(map);
        
        // 4. 尝试修改不可变集合
        try {
            unmodifiableList.add("three"); // 抛出UnsupportedOperationException
        } catch (UnsupportedOperationException e) {
            System.out.println("不能修改不可变集合");
        }
    }
}

特殊集合

Q4: Collections提供了哪些特殊的集合实现?

java 复制代码
public class SpecialCollectionsExample {
    public void demonstrateSpecialCollections() {
        // 1. 检查型集合
        List<String> list = new ArrayList<>();
        List<String> checkedList = 
            Collections.checkedList(list, String.class);
        
        try {
            // 以下代码在编译时不会报错,但运行时会抛出ClassCastException
            List rawList = checkedList;
            rawList.add(new Integer(1));
        } catch (ClassCastException e) {
            System.out.println("类型检查失败");
        }
        
        // 2. 类型安全的枚举Set
        Set<RoundingMode> roundingModes = 
            Collections.newSetFromMap(new EnumMap<>(RoundingMode.class));
        
        // 3. 线程安全且不可修改的集合
        Set<String> set = Collections.singleton("one");
        Map<String, String> map = 
            Collections.singletonMap("key", "value");
    }
}

集合算法

Q5: Collections中的算法实现有哪些?

java 复制代码
public class CollectionsAlgorithmsExample {
    public void demonstrateAlgorithms() {
        List<Integer> list = new ArrayList<>();
        Collections.addAll(list, 3, 1, 4, 1, 5, 9, 2, 6, 5);
        
        // 1. 排序算法
        Collections.sort(list);  // 自然排序
        Collections.sort(list, (a, b) -> b - a);  // 自定义排序
        
        // 2. 查找算法
        int index = Collections.binarySearch(list, 4);
        
        // 3. 极值算法
        int min = Collections.min(list);
        int max = Collections.max(list);
        
        // 4. 随机算法
        Collections.shuffle(list);  // 随机打乱
        Collections.shuffle(list, new Random(47));  // 使用指定的随机源
        
        // 5. 子列表查找
        List<Integer> subList = Arrays.asList(4, 1, 5);
        int indexOfSubList = Collections.indexOfSubList(list, subList);
        int lastIndexOfSubList = 
            Collections.lastIndexOfSubList(list, subList);
    }
}

Q6: 如何正确使用Collections工具类?

java 复制代码
public class CollectionsUsageExample {
    // 1. 集合工厂方法
    public static <T> List<T> createSafeList() {
        return Collections.synchronizedList(new ArrayList<>());
    }
    
    // 2. 不可变集合包装
    public static <T> List<T> createImmutableList(List<T> list) {
        return Collections.unmodifiableList(new ArrayList<>(list));
    }
    
    // 3. 类型安全集合
    public static <T> List<T> createCheckedList(List<T> list, 
                                              Class<T> type) {
        return Collections.checkedList(list, type);
    }
    
    // 4. 最佳实践示例
    public void demonstrateBestPractices() {
        // 使用工厂方法创建集合
        List<String> threadSafeList = createSafeList();
        
        // 创建不可变视图
        List<String> sourceList = new ArrayList<>();
        sourceList.add("one");
        List<String> immutableList = createImmutableList(sourceList);
        
        // 使用类型安全的集合
        List<String> checkedList = createCheckedList(
            new ArrayList<>(), 
            String.class
        );
        
        // 正确的同步访问
        List<String> list = Collections.synchronizedList(
            new ArrayList<>()
        );
        synchronized (list) {
            Iterator<String> i = list.iterator();
            while (i.hasNext())
                System.out.println(i.next());
        }
    }
}

面试关键点

  1. 掌握Collections工具类的常用方法
  2. 理解线程安全包装器的使用
  3. 熟悉不可变集合的创建方式
  4. 了解特殊集合的应用场景
  5. 掌握集合算法的使用
  6. 注意线程安全问题
  7. 理解类型安全的重要性
  8. 掌握最佳实践和性能考虑
相关推荐
Scott9999HH1 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔2 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社2 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海2 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖3 小时前
JDK 26 新特性详解
java·开发语言
马优晨4 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a1117765 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao6 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区6 小时前
怎么把C语言学到精通?
c语言·开发语言
九硕智慧建筑一体化厂家6 小时前
直流智能照明|一站式低碳照明解决方案,安全、节能、降本、全场景适配
安全