【JAVA】Java基础—面向对象编程:常用API与数据结构—集合框架(List、Set、Map等)

Java集合框架是Java编程语言中一个强大的工具集,它提供了数据结构的实现和操作方法,用于存储和处理对象。Java集合框架的核心接口包括List、Set和Map,它们为开发者提供了灵活而高效的数据管理方式。在日常开发中,集合框架的使用无处不在,从简单的数据存储到复杂的数据处理,集合框架都能提供解决方案。

  • List :可以将List比作一个购物清单,清单上的物品是有序的,并且可以重复。

  • Set :可以将Set比作一个参加会议的人员名单,每个人只能出现一次。

  • Map :可以将Map比作一个字典,单词(键)和其定义(值)之间的映射。

1. Java集合框架的重要性

Java集合框架通过提供一组通用的数据结构,简化了数据管理和操作。这些数据结构包括但不限于列表(List)、集合(Set)、映射(Map)等,它们在各种应用场景中都能找到用武之地。

  • List:用于存储有序的元素集合,可以包含重复的元素。

  • Set:用于存储无序的、唯一的元素集合。

  • Map:用于存储键值对映射,键是唯一的,但值可以重复。

2. 实际应用场景
  • List:在需要保持元素顺序或允许重复的场景中,如处理用户输入的历史记录。

  • Set:在需要确保元素唯一性的场景中,如存储用户ID或产品SKU。

  • Map:在需要快速查找的场景中,如缓存数据或配置文件中的键值对。

一、List接口

1. ArrayList的使用
复制代码
import java.util.ArrayList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        // 创建一个ArrayList
        List<String> fruits = new ArrayList<>();

        // 添加元素
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Orange");

        // 获取元素
        String firstFruit = fruits.get(0);
        System.out.println("第一个水果: " + firstFruit); // 输出: 第一个水果: Apple

        // 遍历列表
        System.out.println("水果列表:");
        for (String fruit : fruits) {
            System.out.println(fruit);
        }

        // 删除元素
        fruits.remove("Banana");
        System.out.println("删除后水果列表: " + fruits);
    }
}

解释:

  • ArrayList是List接口的一个实现,底层是基于数组的动态数组。

  • 可以通过add()方法添加元素,通过get(int index)方法获取元素。

  • 使用增强型for循环遍历列表。

  • remove(Object o)方法用于删除指定的元素。

2. LinkedList的使用
复制代码
import java.util.LinkedList;
import java.util.List;

public class LinkedListExample {
    public static void main(String[] args) {
        // 创建一个LinkedList
        List<String> animals = new LinkedList<>();

        // 添加元素
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");

        // 获取第一个和最后一个元素
        String firstAnimal = animals.get(0);
        String lastAnimal = animals.get(animals.size() - 1);
        System.out.println("第一个动物: " + firstAnimal); // 输出: 第一个动物: Dog
        System.out.println("最后一个动物: " + lastAnimal); // 输出: 最后一个动物: Horse

        // 删除第一个元素
        animals.remove(0);
        System.out.println("删除第一个元素后: " + animals);
    }
}

解释:

  • LinkedList是List接口的另一个实现,底层是基于链表的数据结构。

  • 适合频繁插入和删除操作的场景,因为它的元素插入和删除操作效率较高。

二、Set接口

1. HashSet的使用
复制代码
import java.util.HashSet;
import java.util.Set;

public class SetExample {
    public static void main(String[] args) {
        // 创建一个HashSet
        Set<String> colors = new HashSet<>();

        // 添加元素
        colors.add("Red");
        colors.add("Green");
        colors.add("Blue");
        colors.add("Red"); // 重复元素不会被添加

        // 检查元素是否存在
        boolean hasGreen = colors.contains("Green");
        System.out.println("集合中是否有绿色: " + hasGreen); // 输出: 集合中是否有绿色: true

        // 遍历集合
        System.out.println("颜色集合:");
        for (String color : colors) {
            System.out.println(color);
        }
    }
}

解释:

  • HashSet是Set接口的一个实现,基于哈希表。

  • 不允许重复元素,元素的顺序不保证。

  • 适合快速查找、插入和删除元素。

2. TreeSet的使用
复制代码
import java.util.Set;
import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        // 创建一个TreeSet
        Set<String> countries = new TreeSet<>();

        // 添加元素
        countries.add("USA");
        countries.add("China");
        countries.add("India");

        // 遍历集合(自动排序)
        System.out.println("国家集合:");
        for (String country : countries) {
            System.out.println(country);
        }
    }
}

解释:

  • TreeSet是Set接口的另一个实现,基于红黑树。

  • 元素按自然顺序排序。

  • 适合需要排序的场景。

三、Map接口

1. HashMap的使用
复制代码
import java.util.HashMap;
import java.util.Map;

public class MapExample {
    public static void main(String[] args) {
        // 创建一个HashMap
        Map<String, Integer> ages = new HashMap<>();

        // 添加键值对
        ages.put("Alice", 30);
        ages.put("Bob", 25);
        ages.put("Charlie", 35);

        // 获取值
        int ageOfAlice = ages.get("Alice");
        System.out.println("Alice的年龄: " + ageOfAlice); // 输出: Alice的年龄: 30

        // 遍历键值对
        System.out.println("年龄列表:");
        for (Map.Entry<String, Integer> entry : ages.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

解释:

  • HashMap是Map接口的一个实现,基于哈希表。

  • 允许键和值为null。

  • 适合快速查找、插入和删除键值对。

2. TreeMap的使用
复制代码
import java.util.Map;
import java.util.TreeMap;

public class TreeMapExample {
    public static void main(String[] args) {
        // 创建一个TreeMap
        Map<String, String> capitals = new TreeMap<>();

        // 添加键值对
        capitals.put("USA", "Washington, D.C.");
        capitals.put("China", "Beijing");
        capitals.put("India", "New Delhi");

        // 遍历键值对(按键排序)
        System.out.println("国家和首都:");
        for (Map.Entry<String, String> entry : capitals.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

解释:

  • TreeMap是Map接口的另一个实现,基于红黑树。

  • 键按自然顺序排序。

  • 适合需要按键排序的场景。

总结

Java集合框架提供了丰富的数据结构选择,帮助开发者有效地管理和操作数据。理解和熟练使用这些集合类是编写高效Java应用程序的基础。

相关推荐
SL_staff4 小时前
物模型三要素误用避坑指南:属性、事件、服务的正确建模逻辑
java
一条泥憨鱼4 小时前
【Redis | 黑马点评】短信登录功能 源码深度分析
java·redis·后端·session·黑马点评
威哥爱编程4 小时前
【AI全栈12-12】Spring Boot 3.x → 4.x 迁移实操:Jakarta 11、Jackson 3 与 AI 2.0
java·spring boot·后端
微笑星河q4 小时前
C++类和对象(下)初始化列表、类型转换、static、友元、内部类、匿名对象
开发语言·c++
威哥爱编程4 小时前
【AI全栈12-11】Spring Boot 把 AI 接口真正上线扛量:限流 / 降级 / 可观测
java·spring boot·后端
小蒜学长4 小时前
基于SpringBoot+uni-app的闪洁家政系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·uni-app·家政服务
凤年徐4 小时前
【Python】Python 语法速通指南
开发语言·python
quantdash_cc4 小时前
量化数据清洗应该放在数据层还是策略层?从系统架构看清职责边界
开发语言·python·数据分析·系统架构·量化交易·股票数据·quantdash
敲代码的彭于晏4 小时前
2026 K8s 零基础入门:手把手教你一步步搭建 Kubernetes 集群
java·运维·全栈
|_⊙4 小时前
C++ 类和对象零散知识点
开发语言·c++