首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java集合框架核心概念与应用,有两下子!

Java集合框架核心概念与应用,有两下子!

原创
作者头像
bug菌
发布2025-01-26 10:31:51
发布2025-01-26 10:31:51
2670
举报
文章被收录于专栏:滚雪球学Java滚雪球学Java

  咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏中,这个专栏专为有志于提升Java技能的你打造,覆盖Java编程的方方面面,助你从零基础到掌握Java开发的精髓。赶紧关注,收藏,学习吧!

代码语言:java
复制
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

  在Java编程中,集合框架是一个非常重要且基础的部分。它为数据结构的操作提供了强大而灵活的工具,使开发者能够高效地处理数据。本文将以Java集合框架的概述为主题,介绍其主要组件及其用法,通过源代码解析、应用场景案例、优缺点分析等,帮助读者全面理解并掌握Java集合框架。

摘要

  本文介绍了Java集合框架,包括其结构、常用接口及其实现类。通过示例代码和应用场景展示了如何使用这些集合类,并分析了它们的优缺点。最后,通过测试用例展示了集合框架在实际开发中的应用。

概述

Java集合框架的介绍

  Java集合框架(Java Collections Framework,简称JCF)是一个提供了一组数据结构和算法的框架。它包含了一些接口和类,用于存储和操作对象集合。集合框架的主要目标是使得开发者能够以一致且高效的方式处理数据。

集合框架的层次结构图

  Java集合框架的层次结构可以分为三个主要部分:核心接口、实现类和算法。以下是一个简化的层次结构图:

代码语言:java
复制
Collection
├── List
│   ├── ArrayList
│   ├── LinkedList
│   └── Vector
├── Set
│   ├── HashSet
│   ├── LinkedHashSet
│   └── TreeSet
└── Queue
    ├── PriorityQueue
    └── ArrayDeque
Map
├── HashMap
├── LinkedHashMap
└── TreeMap
常用接口
  • Collection:所有集合的根接口。
  • List:有序集合,允许重复元素。
  • Set:无序集合,不允许重复元素。
  • Queue:用于在处理元素前保存元素的集合。
  • Map:键值对映射接口。

源代码解析

示例代码

  以下示例展示了如何使用一些常见的集合类。

代码语言:java
复制
import java.util.*;

public class CollectionExample {
    public static void main(String[] args) {
        // 使用ArrayList
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");
        list.forEach(item -> System.out.println("List item: " + item));

        // 使用HashSet
        Set<String> set = new HashSet<>(list);
        set.add("Apple"); // Duplicate, won't be added
        set.forEach(item -> System.out.println("Set item: " + item));

        // 使用HashMap
        Map<String, Integer> map = new HashMap<>();
        map.put("Apple", 1);
        map.put("Banana", 2);
        map.put("Cherry", 3);
        map.forEach((key, value) -> System.out.println("Map entry: " + key + " = " + value));
    }
}

代码解读:

  根据如上代码作出如下解析,以便于同学们更好的理解与掌握它:

  本地实际运行结果展示如下,有条件的同学们也可以自己本地实践一下。

应用场景案例

案例一:使用List管理有序数据

在开发中,经常需要管理有序数据,如用户输入的顺序、处理的任务队列等。List接口提供了有序的数据存储方式,可以通过索引访问元素。

代码语言:java
复制
package com.example.javase.bugTest.collection.day1;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author bug菌
 * @Source 公众号:猿圈奇妙屋
 * @Date 2024-05-28 0:04
 */
public class Test01 {

    public static void main(String[] args) {
        List<String> tasks = new ArrayList<>();
        tasks.add("Task 1");
        tasks.add("Task 2");
        tasks.add("Task 3");
        for (int i = 0; i < tasks.size(); i++) {
            System.out.println("Processing: " + tasks.get(i));
        }
    }
}

代码解读:

  根据如上代码作出如下解析,以便于同学们更好的理解与掌握它:

  这段代码创建了一个ArrayList集合,并向集合中添加了三个字符串元素。然后使用for循环遍历集合,并打印每个元素。最终输出结果为:

代码语言:java
复制
Processing: Task 1
Processing: Task 2
Processing: Task 3

  本地实际运行结果展示如下,有条件的同学们也可以自己本地实践一下。

案例二:使用Set确保唯一性

在某些情况下,需要确保集合中的元素唯一,如处理用户ID集合。Set接口提供了无序且唯一的存储方式。

代码语言:java
复制
package com.example.javase.bugTest.collection.day1;

import java.util.HashSet;
import java.util.Set;

/**
 * @Author bug菌
 * @Source 公众号:猿圈奇妙屋
 * @Date 2024-05-28 0:05
 */
public class Test02 {
    public static void main(String[] args) {
        Set<String> userIds = new HashSet<>();
        userIds.add("user1");
        userIds.add("user2");
        userIds.add("user1"); // Duplicate, won't be added
        userIds.forEach(id -> System.out.println("User ID: " + id));
    }
}

代码解读:

  根据如上代码作出如下解析,以便于同学们更好的理解与掌握它:

  这段代码创建了一个HashSet对象userIds来存储用户ID。然后,它添加了三个用户ID:user1、user2和user1(重复的不会被添加)。最后,使用forEach方法迭代打印每个用户ID。

由于HashSet是一个集合,它不接受重复的元素。所以,第二次尝试添加"user1"时,由于它已经存在于集合中,不会被添加。

最后的输出将是:

代码语言:java
复制
User ID: user1
User ID: user2

  本地实际运行结果展示如下,有条件的同学们也可以自己本地实践一下。

案例三:使用Map进行键值对映射

需要根据键快速查找值时,Map接口提供了键值对的存储方式,可以高效地进行查找操作。

代码语言:java
复制
package com.example.javase.bugTest.collection.day1;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author bug菌
 * @Source 公众号:猿圈奇妙屋
 * @Date 2024-05-28 0:06
 */
public class Test03 {

    public static void main(String[] args) {
        Map<String, Integer> productPrices = new HashMap<>();
        productPrices.put("Apple", 100);
        productPrices.put("Banana", 80);
        productPrices.put("Cherry", 150);
        productPrices.forEach((product, price) -> System.out.println(product + ": " + price));
    }
}

代码解读:

  根据如上代码作出如下解析,以便于同学们更好的理解与掌握它:

  此代码是一个简单的Java程序,演示了如何使用HashMap来存储产品价格,并使用forEach方法遍历输出所有产品及其价格。

  首先,创建了一个名为productPrices的HashMap对象,键的类型是String,值的类型是Integer。然后使用put方法向HashMap中添加产品及其价格。

  接下来,通过调用forEach方法对HashMap中的每个键值对执行指定的操作。在这里,使用Lambda表达式将产品和价格输出到控制台。

  最后,在main方法中调用了这个forEach方法,输出了所有产品及其价格。

这段代码的输出结果应该是:

代码语言:java
复制
Apple: 100
Banana: 80
Cherry: 150

  本地实际运行结果展示如下,有条件的同学们也可以自己本地实践一下。

优缺点分析

优点
  • 灵活性:Java集合框架提供了多种数据结构,可以满足不同场景的需求。
  • 高效性:大部分集合类都经过优化,具有较高的性能。
  • 一致性:所有集合类都实现了相同的接口,使用方式一致。
缺点
  • 复杂性:集合类种类繁多,初学者可能难以选择合适的数据结构。
  • 开销:某些集合类,如LinkedList,在特定操作上的性能开销较大。

类代码方法介绍

ArrayList

ArrayList是一个动态数组实现,适用于频繁读取和修改操作。

常用方法:

  • add(E e)
  • get(int index)
  • remove(int index)
  • size()
HashSet

HashSet是一个基于哈希表的实现,适用于存储唯一元素。

常用方法:

  • add(E e)
  • remove(Object o)
  • contains(Object o)
  • size()
HashMap

HashMap是一个基于哈希表的键值对映射实现,适用于快速查找。

常用方法:

  • put(K key, V value)
  • get(Object key)
  • remove(Object key)
  • containsKey(Object key)

测试用例

以下是一些使用集合框架的测试用例:

下面是将代码改写成在 main 函数中直接进行测试的版本。这种改写方式将所有测试逻辑都放在 main 函数中,而不是通过调用单独的方法来进行测试。

代码语言:java
复制
package com.example.javase.bugTest.collection.day1;

import java.util.\*;

- @Author bug菌
- @Source 公众号:猿圈奇妙屋
- @Date 2024-05-28 0:01
public class CollectionTest {
    public static void main(String[] args) {
        // Test List
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");
        assert list.size() == 3 : "List size should be 3";
        assert list.get(1).equals("Banana") : "Second item should be Banana";
        System.out.println("List tests passed.");
        }
}

测试结果

  针对如上测试代码,这里我本地进行实际测试一波,结果仅供参考,有条件的同学们也可以自己本地实践一下。

测试代码解析

  针对如上测试代码,这里我再具体给大家讲解下,希望能够更透彻的帮助大家理解。

  这段代码是一个集合框架的测试案例。它测试了List、Set和Map三种集合类型的基本功能。

  首先,代码创建了一个ArrayList对象,并向其中添加了三个元素。然后通过断言验证集合的大小应该为3,并且获取第二个元素应该是"Banana"。如果断言失败,将会抛出AssertionError异常。

  接下来,代码创建了一个HashSet对象,并向其中添加了三个元素。由于集合中已经存在"Apple"这个元素,所以再次添加"Apple"时会被忽略。通过断言验证集合的大小应该为2,并且集合中应该包含"Apple"这个元素。

  最后,代码创建了一个HashMap对象,并向其中添加了三个键值对。通过断言验证Map的大小应该为3,并且通过键"Banana"获取到的值应该是2。

  如果上述断言都通过了,程序将输出"List tests passed."、"Set tests passed."和"Map tests passed.",表示所有的测试都通过了。

全文小结

  本文详细介绍了Java集合框架的基本概念和常用接口,并通过示例代码和应用场景展示了其用法和优势。通过这些内容,读者可以全面了解Java集合框架的各个组成部分及其实际应用。

总结

  Java集合框架是一个强大而灵活的工具,为开发者提供了多种数据结构和算法,能够满足各种应用场景的需求。通过合理使用集合框架,可以编写出高效、简洁且易维护的代码。

结尾

  希望本文能帮助读者更好地理解和运用Java集合框架。如果有任何疑问或建议,欢迎讨论和交流。祝大家编程愉快!

  ... ...

  好啦,这期的内容就基本接近尾声啦,若你想学习更多,你可以看看专栏的导读篇《「滚雪球学Java」教程导航帖》,本专栏致力打造最硬核 Java 零基础系列学习内容,🚀打造全网精品硬核专栏,带你直线超车;欢迎大家订阅持续学习。功不唐捐,久久为功!

「赠人玫瑰,手留余香」,咱们下期拜拜~~

附录源码

  如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

  码字不易,如果这篇文章对你有所帮助,帮忙给bug菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。   同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

  我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金等平台签约作者,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计30w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


--End

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 摘要
  • 概述
    • Java集合框架的介绍
    • 集合框架的层次结构图
    • 常用接口
  • 源代码解析
    • 示例代码
  • 应用场景案例
    • 案例一:使用List管理有序数据
    • 案例二:使用Set确保唯一性
    • 案例三:使用Map进行键值对映射
  • 优缺点分析
    • 优点
    • 缺点
  • 类代码方法介绍
    • ArrayList
    • HashSet
    • HashMap
  • 测试用例
  • 测试结果
  • 测试代码解析
  • 全文小结
  • 总结
  • 结尾
  • 附录源码
  • ☀️建议/推荐你
  • 📣关于我
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档