在 Java 中如何迭代 LinkedHashMap 的 ArrayList

简介: 【8月更文挑战第23天】

在 Java 编程中,有时我们需要处理复杂的数据结构,例如包含 ArrayList 的 LinkedHashMap。迭代这样的数据结构需要一些特定的方法和技巧。下面将详细介绍如何在 Java 中迭代 LinkedHashMap 的 ArrayList。

一、了解 LinkedHashMap 和 ArrayList

  1. LinkedHashMap
    LinkedHashMap 是 Java 集合框架中的一种映射实现,它保留了插入顺序。这意味着在遍历 LinkedHashMap 时,元素将按照它们被插入的顺序出现。

  2. ArrayList
    ArrayList 是一种动态数组,它可以存储任意类型的对象。ArrayList 允许快速随机访问元素,并且可以根据需要自动调整大小。

二、创建包含 ArrayList 的 LinkedHashMap

首先,我们需要创建一个包含 ArrayList 的 LinkedHashMap。假设我们有一个表示学生课程和成绩的场景,我们可以使用以下代码创建一个 LinkedHashMap,其中键是课程名称,值是一个包含学生成绩的 ArrayList:

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

public class LinkedHashMapArrayListExample {
   
    public static void main(String[] args) {
   
        LinkedHashMap<String, List<Integer>> studentGrades = new LinkedHashMap<>();

        List<Integer> mathGrades = new ArrayList<>();
        mathGrades.add(85);
        mathGrades.add(90);
        mathGrades.add(78);

        List<Integer> scienceGrades = new ArrayList<>();
        scienceGrades.add(92);
        scienceGrades.add(88);
        scienceGrades.add(95);

        studentGrades.put("Math", mathGrades);
        studentGrades.put("Science", scienceGrades);
    }
}

在这个例子中,我们创建了一个 LinkedHashMap,其中键是课程名称,值是一个包含学生成绩的 ArrayList。

三、迭代 LinkedHashMap 的 ArrayList

  1. 使用 for-each 循环
    一种常见的方法是使用 for-each 循环遍历 LinkedHashMap 的条目,并进一步遍历每个 ArrayList。
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

public class LinkedHashMapArrayListExample {
   
    public static void main(String[] args) {
   
        LinkedHashMap<String, List<Integer>> studentGrades = new LinkedHashMap<>();

        // 创建和添加数据(与上面的代码相同)

        for (Map.Entry<String, List<Integer>> entry : studentGrades.entrySet()) {
   
            String subject = entry.getKey();
            List<Integer> grades = entry.getValue();
            System.out.println("Subject: " + subject);
            for (Integer grade : grades) {
   
                System.out.println("  Grade: " + grade);
            }
        }
    }
}

在这个例子中,我们使用 for-each 循环遍历 LinkedHashMap 的条目。对于每个条目,我们获取课程名称和对应的成绩 ArrayList。然后,我们再次使用 for-each 循环遍历成绩 ArrayList,并打印出每个成绩。

  1. 使用迭代器
    另一种方法是使用迭代器遍历 LinkedHashMap 和 ArrayList。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;

public class LinkedHashMapArrayListExample {
   
    public static void main(String[] args) {
   
        LinkedHashMap<String, List<Integer>> studentGrades = new LinkedHashMap<>();

        // 创建和添加数据(与上面的代码相同)

        Iterator<Map.Entry<String, List<Integer>>> iterator = studentGrades.entrySet().iterator();
        while (iterator.hasNext()) {
   
            Map.Entry<String, List<Integer>> entry = iterator.next();
            String subject = entry.getKey();
            List<Integer> grades = entry.getValue();
            System.out.println("Subject: " + subject);
            Iterator<Integer> gradeIterator = grades.iterator();
            while (gradeIterator.hasNext()) {
   
                Integer grade = gradeIterator.next();
                System.out.println("  Grade: " + grade);
            }
        }
    }
}

在这个例子中,我们首先使用迭代器遍历 LinkedHashMap 的条目。对于每个条目,我们获取课程名称和对应的成绩 ArrayList。然后,我们创建一个迭代器来遍历成绩 ArrayList,并打印出每个成绩。

四、在迭代过程中修改数据

在某些情况下,我们可能需要在迭代过程中修改 LinkedHashMap 的 ArrayList 中的数据。但是,需要注意的是,在使用迭代器遍历 ArrayList 时,不能直接使用 ArrayList 的 addremoveset 方法来修改列表,否则会抛出 ConcurrentModificationException 异常。

如果需要在迭代过程中修改 ArrayList,可以使用迭代器的 removesetadd 方法来安全地修改列表。

例如,假设我们想要在遍历成绩 ArrayList 时,如果成绩小于 80,则将其从列表中删除:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;

public class LinkedHashMapArrayListExample {
   
    public static void main(String[] args) {
   
        LinkedHashMap<String, List<Integer>> studentGrades = new LinkedHashMap<>();

        // 创建和添加数据(与上面的代码相同)

        Iterator<Map.Entry<String, List<Integer>>> iterator = studentGrades.entrySet().iterator();
        while (iterator.hasNext()) {
   
            Map.Entry<String, List<Integer>> entry = iterator.next();
            String subject = entry.getKey();
            List<Integer> grades = entry.getValue();
            System.out.println("Subject: " + subject);
            Iterator<Integer> gradeIterator = grades.iterator();
            while (gradeIterator.hasNext()) {
   
                Integer grade = gradeIterator.next();
                if (grade < 80) {
   
                    gradeIterator.remove();
                } else {
   
                    System.out.println("  Grade: " + grade);
                }
            }
        }
    }
}

在这个例子中,我们在遍历成绩 ArrayList 时,检查每个成绩是否小于 80。如果是,我们使用迭代器的 remove 方法将其从列表中删除。

五、总结

在 Java 中,迭代包含 ArrayList 的 LinkedHashMap 可以使用 for-each 循环或迭代器。在迭代过程中,可以访问和处理 LinkedHashMap 的键值对以及 ArrayList 中的每个元素。如果需要在迭代过程中修改 ArrayList,应该使用迭代器的方法来安全地修改列表。通过正确地使用这些方法,可以有效地处理包含复杂数据结构的 LinkedHashMap,并实现各种数据处理逻辑。

目录
相关文章
|
11天前
|
Java 索引 容器
Java ArrayList扩容的原理
Java 的 `ArrayList` 是基于数组实现的动态集合。初始时,`ArrayList` 底层创建一个空数组 `elementData`,并设置 `size` 为 0。当首次添加元素时,会调用 `grow` 方法将数组扩容至默认容量 10。之后每次添加元素时,如果当前数组已满,则会再次调用 `grow` 方法进行扩容。扩容规则为:首次扩容至 10,后续扩容至原数组长度的 1.5 倍或根据实际需求扩容。例如,当需要一次性添加 100 个元素时,会直接扩容至 110 而不是 15。
Java ArrayList扩容的原理
|
3月前
|
存储 算法 Java
Arraylist 在 Java 中能容纳多少个元素?
【8月更文挑战第23天】
103 0
|
15天前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
24天前
|
存储 Java API
详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
【10月更文挑战第19天】深入剖析Java Map:不仅是高效存储键值对的数据结构,更是展现设计艺术的典范。本文从基本概念、设计艺术和使用技巧三个方面,详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
41 3
|
25天前
|
安全 Java 程序员
Java集合之战:ArrayList vs LinkedList,谁才是你的最佳选择?
本文介绍了 Java 中常用的两个集合类 ArrayList 和 LinkedList,分析了它们的底层实现、特点及适用场景。ArrayList 基于数组,适合频繁查询;LinkedList 基于链表,适合频繁增删。文章还讨论了如何实现线程安全,推荐使用 CopyOnWriteArrayList 来提升性能。希望帮助读者选择合适的数据结构,写出更高效的代码。
48 3
|
2月前
|
Java
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
本文介绍了Java中抽象类和抽象方法的使用,以及ArrayList的基本操作,包括添加、获取、删除元素和判断列表是否为空。
27 2
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
19 0
|
3月前
|
存储 Java
Java中ArrayList 元素的排序
本文提供了Java中根据`ArrayList`元素的某个属性进行排序的示例代码,包括实现`Comparable`接口和重载`compareTo`方法,然后使用`Collections.sort`方法进行排序。
|
3月前
|
Java
如何在 Java 中使 Arraylist 匿名?
【8月更文挑战第23天】
56 0
|
3月前
|
存储 Java 编译器