Java 集合容器实操技巧与案例详解

本文涉及的产品
轻量应用服务器 2vCPU 4GiB,适用于搭建容器环境
轻量应用服务器 2vCPU 1GiB,适用于搭建电商独立站
无影云电脑个人版,1个月黄金款+200核时
简介: 本教程基于Java 8+新特性和现代开发实践,深入讲解Java集合容器的实操技巧。通过具体场景演示Stream API数据处理、ConcurrentHashMap并发控制、LinkedHashMap实现LRU缓存、TreeSet自定义排序等高级特性。同时涵盖computeIfAbsent优化操作、EnumMap专用集合使用、集合统计与运算(交集、并集、差集)等内容。代码示例丰富,助力掌握高效编程方法。[点击获取完整代码](https://pan.quark.cn/s/14fcf913bae6)。

我将基于Java 8+的新特性和现代开发实践,结合实际场景,为你提供Java集合容器的实操内容。以下代码展示了如何使用Java集合框架的高级特性解决实际问题。

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors;

public class CollectionPractice {
   

    // 1. 使用Stream API处理集合
    public static void streamApiExample() {
   
        List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        // 过滤长度大于5的单词,转换为大写,收集到新列表
        List<String> filteredWords = words.stream()
                .filter(word -> word.length() > 5)
                .map(String::toUpperCase)
                .collect(Collectors.toList());

        System.out.println("过滤后的单词: " + filteredWords);

        // 计算所有单词的字符总数
        int totalLength = words.stream()
                .mapToInt(String::length)
                .sum();

        System.out.println("字符总数: " + totalLength);

        // 按长度分组单词
        Map<Integer, List<String>> wordsByLength = words.stream()
                .collect(Collectors.groupingBy(String::length));

        System.out.println("按长度分组: " + wordsByLength);
    }

    // 2. 使用ConcurrentHashMap处理并发场景
    public static void concurrentHashMapExample() {
   
        ConcurrentHashMap<String, Integer> wordCounts = new ConcurrentHashMap<>();
        List<String> documents = Arrays.asList(
                "Java is a popular programming language",
                "Python is another popular programming language",
                "Java and Python are widely used in data science"
        );

        // 并行处理文档,统计单词频率
        documents.parallelStream()
                .flatMap(doc -> Arrays.stream(doc.split(" ")))
                .forEach(word -> wordCounts.compute(word, (k, v) -> v == null ? 1 : v + 1));

        System.out.println("单词频率统计: " + wordCounts);
    }

    // 3. 使用LinkedHashMap实现LRU缓存
    public static void lruCacheExample() {
   
        // 容量为3的LRU缓存
        LinkedHashMap<String, String> lruCache = new LinkedHashMap<String, String>(3, 0.75f, true) {
   
            @Override
            protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
   
                return size() > 3;
            }
        };

        lruCache.put("key1", "value1");
        lruCache.put("key2", "value2");
        lruCache.put("key3", "value3");
        System.out.println("缓存内容: " + lruCache);

        // 访问key2,使其变为最近使用
        lruCache.get("key2");
        System.out.println("访问key2后: " + lruCache);

        // 添加新元素,触发LRU淘汰
        lruCache.put("key4", "value4");
        System.out.println("添加key4后: " + lruCache); // key1应被淘汰
    }

    // 4. 使用TreeSet对自定义对象排序
    public static void treeSetSortingExample() {
   
        // 按价格排序的商品集合
        TreeSet<Product> products = new TreeSet<>(Comparator.comparingDouble(Product::getPrice));
        products.add(new Product("Laptop", 1200.0));
        products.add(new Product("Mouse", 25.0));
        products.add(new Product("Monitor", 300.0));

        System.out.println("按价格排序的商品:");
        products.forEach(System.out::println);
    }

    // 5. 使用Map的computeIfAbsent方法优化缓存加载
    public static void computeIfAbsentExample() {
   
        Map<String, List<String>> userRoles = new HashMap<>();

        // 传统方式
        String username = "admin";
        List<String> roles = userRoles.get(username);
        if (roles == null) {
   
            roles = new ArrayList<>();
            userRoles.put(username, roles);
        }
        roles.add("ADMIN");
        roles.add("USER");

        // 使用computeIfAbsent简化
        userRoles.computeIfAbsent("user1", k -> new ArrayList<>()).add("USER");

        System.out.println("用户角色: " + userRoles);
    }

    // 6. 使用EnumMap存储枚举值映射
    public static void enumMapExample() {
   
        enum Weekday {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

        EnumMap<Weekday, String> schedule = new EnumMap<>(Weekday.class);
        schedule.put(Weekday.MONDAY, "Meeting");
        schedule.put(Weekday.TUESDAY, "Training");
        schedule.put(Weekday.WEDNESDAY, "Project work");

        System.out.println("周三安排: " + schedule.get(Weekday.WEDNESDAY));
    }

    // 7. 使用集合进行数据统计
    public static void statisticsExample() {
   
        List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5);

        // 使用IntSummaryStatistics进行统计
        IntSummaryStatistics stats = numbers.stream()
                .mapToInt(Integer::intValue)
                .summaryStatistics();

        System.out.println("统计信息:");
        System.out.println("总数: " + stats.getCount());
        System.out.println("总和: " + stats.getSum());
        System.out.println("平均值: " + stats.getAverage());
        System.out.println("最大值: " + stats.getMax());
        System.out.println("最小值: " + stats.getMin());
    }

    // 8. 使用集合去重和转换
    public static void distinctAndMapExample() {
   
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Alice", "David");

        // 去重并转换为大写
        List<String> uniqueNames = names.stream()
                .distinct()
                .map(String::toUpperCase)
                .collect(Collectors.toList());

        System.out.println("去重并大写后的名字: " + uniqueNames);
    }

    // 9. 使用队列实现任务调度
    public static void queueExample() {
   
        // 优先队列(最小堆)
        PriorityQueue<Task> taskQueue = new PriorityQueue<>(Comparator.comparingInt(Task::getPriority));
        taskQueue.add(new Task("Task 1", 3));
        taskQueue.add(new Task("Task 2", 1));
        taskQueue.add(new Task("Task 3", 2));

        System.out.println("任务执行顺序:");
        while (!taskQueue.isEmpty()) {
   
            System.out.println(taskQueue.poll());
        }
    }

    // 10. 使用集合交集、并集和差集操作
    public static void setOperationsExample() {
   
        Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
        Set<Integer> set2 = new HashSet<>(Arrays.asList(4, 5, 6, 7, 8));

        // 交集
        Set<Integer> intersection = new HashSet<>(set1);
        intersection.retainAll(set2);
        System.out.println("交集: " + intersection);

        // 并集
        Set<Integer> union = new HashSet<>(set1);
        union.addAll(set2);
        System.out.println("并集: " + union);

        // 差集
        Set<Integer> difference = new HashSet<>(set1);
        difference.removeAll(set2);
        System.out.println("差集 (set1 - set2): " + difference);
    }

    public static void main(String[] args) {
   
        System.out.println("=== Stream API示例 ===");
        streamApiExample();

        System.out.println("\n=== ConcurrentHashMap示例 ===");
        concurrentHashMapExample();

        System.out.println("\n=== LRU缓存示例 ===");
        lruCacheExample();

        System.out.println("\n=== TreeSet排序示例 ===");
        treeSetSortingExample();

        System.out.println("\n=== computeIfAbsent示例 ===");
        computeIfAbsentExample();

        System.out.println("\n=== EnumMap示例 ===");
        enumMapExample();

        System.out.println("\n=== 统计示例 ===");
        statisticsExample();

        System.out.println("\n=== 去重和转换示例 ===");
        distinctAndMapExample();

        System.out.println("\n=== 队列示例 ===");
        queueExample();

        System.out.println("\n=== 集合操作示例 ===");
        setOperationsExample();
    }

    // 商品类,用于TreeSet示例
    static class Product {
   
        private String name;
        private double price;

        public Product(String name, double price) {
   
            this.name = name;
            this.price = price;
        }

        public double getPrice() {
   
            return price;
        }

        @Override
        public String toString() {
   
            return name + ": $" + price;
        }
    }

    // 任务类,用于队列示例
    static class Task {
   
        private String name;
        private int priority;

        public Task(String name, int priority) {
   
            this.name = name;
            this.priority = priority;
        }

        public int getPriority() {
   
            return priority;
        }

        @Override
        public String toString() {
   
            return name + " (优先级: " + priority + ")";
        }
    }
}

上述代码展示了Java集合容器的现代使用方式,包括:

  1. Stream API的使用:通过流式操作过滤、映射和收集集合元素,实现复杂的数据处理。
  2. 并发集合:使用ConcurrentHashMap在多线程环境中高效地处理共享数据。
  3. LRU缓存实现:通过LinkedHashMap的访问顺序特性实现LRU缓存策略。
  4. 自定义排序:使用TreeSetComparator对自定义对象进行排序。
  5. 集合操作优化:利用computeIfAbsent等方法简化集合操作,避免空值检查。
  6. 专用集合:展示EnumMap等针对特定场景优化的集合类。
  7. 统计功能:使用IntSummaryStatistics等工具类进行数据统计。
  8. 集合运算:实现集合的交集、并集和差集操作。

这些示例覆盖了日常开发中常见的场景,展示了如何利用Java集合框架的高级特性编写简洁、高效的代码。


Java 集合框架,ArrayList,HashMap,LinkedList,HashSet,ConcurrentHashMap, 集合性能优化,集合线程安全,集合遍历技巧,集合排序,集合去重,集合转换,Java 集合面试题,Java8 集合新特性,集合实战案例



代码获取方式
https://pan.quark.cn/s/14fcf913bae6


相关文章
|
1月前
|
IDE Java 数据挖掘
Java 基础类从入门到精通实操指南
这份指南专注于**Java 17+**的新特性和基础类库的现代化用法,涵盖开发环境配置、数据类型增强(如文本块)、字符串与集合处理进阶、异常改进(如密封类)、IO操作及实战案例。通过具体代码示例,如CSV数据分析工具,帮助开发者掌握高效编程技巧。同时提供性能优化建议和常用第三方库推荐,适合从入门到精通的Java学习者。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
123 35
|
25天前
|
自然语言处理 前端开发 Java
JBoltAI 框架完整实操案例 在 Java 生态中快速构建大模型应用全流程实战指南
本案例基于JBoltAI框架,展示如何快速构建Java生态中的大模型应用——智能客服系统。系统面向电商平台,具备自动回答常见问题、意图识别、多轮对话理解及复杂问题转接人工等功能。采用Spring Boot+JBoltAI架构,集成向量数据库与大模型(如文心一言或通义千问)。内容涵盖需求分析、环境搭建、代码实现(知识库管理、核心服务、REST API)、前端界面开发及部署测试全流程,助你高效掌握大模型应用开发。
151 5
|
23天前
|
算法 Java API
2025 版 Java 零基础入门到精通实操指南
这篇文章为零基础学习者提供了Java入门的全面指南。首先介绍了Java的特点和用途,然后详细讲解了环境搭建步骤(JDK安装、环境变量配置和IDE选择),并以&quot;Hello World&quot;程序为例演示了开发流程。文章还系统性地讲解了Java核心语法,包括变量与数据类型、运算符、控制流语句、数组和方法等基础知识,以及面向对象编程和异常处理的概念。通过代码示例帮助读者理解和实践,最后建议掌握基础后可进一步学习Java高级特性和框架。文中还提供了代码获取方式和关注入口,适合Java初学者系统学习。
411 2
|
1月前
|
前端开发 JavaScript Java
Java 学习路线规划及项目案例中的技术栈应用解析
内容包括:**Java 17核心特性**(如sealed class、record)与模块化开发;Spring Boot 3 + Spring Cloud微服务架构,涉及响应式编程(WebFlux)、多数据库持久化(JPA、R2DBC、MongoDB);云原生技术**如Docker、Kubernetes及CI/CD流程;性能优化(GraalVM Native Image、JVM调优);以及前后端分离开发(Vue 3、Spring Boot集成)。通过全栈电商平台项目实战,掌握从后端服务(用户、商品、订单)到前端应用(Vue 3、React Native)的全流程开发。
76 9
|
1月前
|
IDE Java 开发工具
Java 基础篇必背综合知识点最新技术与实操应用全面总结指南
本总结梳理了Java 17+的核心知识点与新技术,涵盖基础概念(模块化系统、GraalVM)、数据类型(文本块、模式匹配)、流程控制(增强switch)、面向对象(Record类、密封类)、常用类库(Stream API、HttpClient)、实战案例(文件处理)、构建工具(Maven、Gradle)、测试框架(JUnit 5)、开发工具(IDE、Git)及云原生开发(Spring Boot 3、Docker)。通过理论结合实操,帮助开发者掌握Java最新特性并应用于项目中。代码示例丰富,建议配合实践加深理解。
70 4
|
27天前
|
安全 Java API
Java 17 + 特性与现代开发技术实操应用详解
本指南聚焦Java 17+最新技术,涵盖模块化开发、Record类、模式匹配、文本块、Stream API增强、虚拟线程等核心特性,结合Spring Boot 3与Micronaut框架实战。通过实操案例解析现代Java开发技术栈,包括高性能并发编程、GraalVM原生编译及开发工具链配置。同时梳理面试高频考点,助力掌握Java新特性和实际应用,适合学习与项目实践。代码示例丰富,附带完整资源下载链接。
257 0
|
25天前
|
消息中间件 机器学习/深度学习 Java
java 最新技术驱动的智能教育在线实验室设备管理与实验资源优化实操指南
这是一份基于最新技术的智能教育在线实验室设备管理与实验资源优化的实操指南,涵盖系统搭建、核心功能实现及优化策略。采用Flink实时处理、Kafka消息队列、Elasticsearch搜索分析和Redis缓存等技术栈,结合强化学习动态优化资源调度。指南详细描述了开发环境准备、基础组件部署、数据采集与处理、模型训练、API服务集成及性能调优步骤,支持高并发设备接入与低延迟处理,满足教育机构数字化转型需求。代码已提供下载链接,助力快速构建智能化实验室管理系统。
92 44
|
25天前
|
缓存 监控 NoSQL
Redis 实操要点:Java 最新技术栈的实战解析
本文介绍了基于Spring Boot 3、Redis 7和Lettuce客户端的Redis高级应用实践。内容包括:1)现代Java项目集成Redis的配置方法;2)使用Redisson实现分布式可重入锁与公平锁;3)缓存模式解决方案,包括布隆过滤器防穿透和随机过期时间防雪崩;4)Redis数据结构的高级应用,如HyperLogLog统计UV和GeoHash处理地理位置。文章提供了详细的代码示例,涵盖Redis在分布式系统中的核心应用场景,特别适合需要处理高并发、分布式锁等问题的开发场景。
138 38
|
27天前
|
SQL Kubernetes Java
Java 最新技术实操:从基础到进阶的详细指南
本文介绍了Java 17及后续版本的核心技术实操,涵盖新特性、集合框架、异常处理和多线程编程等内容。主要包括:密封类(Sealed Classes)的继承层级控制、模式匹配(Pattern Matching)简化类型判断、文本块(Text Blocks)处理多行字符串;集合框架中的工厂方法和Stream API高级操作;异常处理的最佳实践如自动资源管理(ARM)和自定义异常;多线程编程中的CompletableFuture异步编程和ReentrantLock显式锁使用。
88 6
|
24天前
|
人工智能 Java API
Java 生态大模型应用开发全流程实战案例与技术路径终极对决
在Java生态中开发大模型应用,Spring AI、LangChain4j和JBoltAI是三大主流框架。本文从架构设计、核心功能、开发体验、性能扩展性、生态社区等维度对比三者特点,并结合实例分析选型建议。Spring AI适合已有Spring技术栈团队,LangChain4j灵活性强适用于学术研究,JBoltAI提供开箱即用的企业级解决方案,助力传统系统快速AI化改造。开发者可根据业务场景和技术背景选择最适合的框架。
134 2