如何在 Java 中迭代 2D 列表(列表的列表)?
可以使用称为 2D 列表或列表列表的数据结构来以二维格式保存数据集合。
2D 列表中的一行由此列表列表中的每个内部列表表示。
例如,可以使用 2D 列表来存储棋盘的数据,其中列表中的每个组件都对应棋盘上的单个方块。
使用的方法
可以使用以下两种方法之一迭代 2D 列表 -
使用循环
使用迭代器
方法 1:使用循环
有两种方法可以遍历 2D 列表(列表的列表)。
第一种方法是使用嵌套的 for-each 循环。为此,我们必须首先检索您想要迭代的 2D 列表。之后,您可以使用两个 for-each 循环有效地遍历列表的条目。
在第一个 for-each 循环中,2D 列表的每一行都被视为一个单独的列表。您可以使用变量"list"来指示 2D 列表的每一行 -
语法
for (List<K> list : listOfLists) { // 在此处对每一行(列表)执行操作 }
使用第二个 for-each 循环时,您可以单独访问每行中的每个项目。这里,变量"item"代表每个项目 -
语法
for (K item : list) { // 在这里对每个项目执行操作 }
通过使用这些嵌套的 for-each 循环,您可以有效地迭代 2D 列表并根据您的需要控制其元素。
for()
代码演示了如何使用嵌套的 for-each 循环在 Java 中迭代 2D 列表(列表列表)。它以所需的格式打印每个内部列表的元素。
算法
步骤 1 - 导入代码所需的库。
步骤 2 - 创建"iterateUsingForEach"函数,该函数接受列表列表作为参数。
步骤 3 - 打印一个左括号"["以指示列表的开始。
步骤 4 - 遍历输入 listOfLists 中的每个列表。
步骤 5 - 对于每个列表,打印一个左括号"["以显示内部列表的开头。
步骤 6 - 迭代当前列表中的每个项目列表。
步骤 7 − 打印每个项目。添加逗号将它们分开。
步骤 8 - 打印一个右括号"]"以指示内部列表的结尾,以及一个逗号和一个空格。
步骤 9 - 打印一个右括号"]"以指示外部列表的结尾。
步骤 10 - 退出函数。
步骤 11 - 在主函数中 -
创建一个名为"listOfLists"的空列表来保存整数列表。
创建四个单独的列表并用整数填充它们。
将每个单独的列表添加到"listOfLists"中。
步骤12 − 调用"iterateUsingForEach"函数,将"listOfLists"作为参数传递,以所需格式打印列表。
步骤 13 − 该方法的输出是"listOfLists"的打印版本。
示例
import java.util.*; public class List_of_list { public static <K> void iterateUsingForEach(List<List<K>> listOfLists) { System.out.println("["); for (List<K> list : listOfLists) { System.out.print(" ["); for (K item : list) { System.out.print(" " + item + ", "); } System.out.println("], "); } System.out.println("]"); } public static void main(String[] args) { // List of Lists ArrayList<List<Integer>> listOfLists = new ArrayList<List<Integer>>(); List<Integer> list1 = new ArrayList<Integer>(); list1.add(50); list1.add(100); listOfLists.add(list1); List<Integer> list2 = new ArrayList<Integer>(); list2.add(2); listOfLists.add(list2); List<Integer> list3 = new ArrayList<Integer>(); // Corrected variable name list3.add(200); list3.add(300); list3.add(400); listOfLists.add(list3); List<Integer> list4 = new ArrayList<Integer>(); list4.add(500); listOfLists.add(list4); iterateUsingForEach(listOfLists); } }
输出
[ [50, 100, ], [2, ], [200, 300, 400, ], [500, ], ]
方法 2:借助迭代器
在 Java 中使用迭代器迭代列表列表(第二个列表),涉及几个步骤 −
检索需要迭代的 2D 列表。
创建主迭代器以迭代第二个列表的每一行作为单独的列表。如何为 2D 列表的每一行获取单独的列表?您可以使用迭代器的 next() 函数。
语法
Iterator<List<K>> listOfListsIterator = listOfLists.iterator();
值得注意的是,next() 方法将迭代器作为 Object 的对象返回。因此,您必须将返回的对象转换为列表 -
语法
List<K> list = (List<K>) listOfListsIterator.next();
创建第二个迭代器,一次遍历每行中的每个项目。可以通过在每个单独的列表上使用 iterator() 方法获取迭代器 -
语法
Iterator<K> eachListIterator = list.iterator();
对每个项目执行任何所需的操作。
hasNext()
代码演示了如何使用 Java 中的迭代器遍历 2D 列表。它将每个内部列表的元素打印在方括号内,用逗号分隔。
算法
步骤 1 - 借助 listOfLists 变量和 iterator() 函数检索 listOfLists 变量的迭代器。
步骤 2 - 创建一个通过迭代器进行迭代的循环。循环一直持续,直到迭代器的 hasNext() 方法返回 true。
步骤 3 - 获取迭代器的下一个元素。我们使用迭代器的 next() 方法来执行此操作。
步骤 4 - 验证元素是否为列表。如果是,则重复对元素运行 iterateUsingIterator() 函数。否则,只需打印元素即可。
步骤 5 - 重复步骤 3-4,直到迭代器耗尽
示例
import java.util.*; public class List_of_list { public static <K> void iterateUsingIterator(List<List<K> > listOfLists){ Iterator listOfListsIterator = listOfLists.iterator(); System.out.println("["); while (listOfListsIterator.hasNext()) { // 类型转换 next() 方法用于从 Object 转换为 List<K> List<K> list = new ArrayList<K>(); list = (List<K>)listOfListsIterator.next(); // 列表的迭代器 Iterator eachListIterator = list.iterator(); System.out.print(" ["); while (eachListIterator.hasNext()) { System.out.print(" " + eachListIterator.next() + ", "); } System.out.println("], "); } System.out.println("]"); } // Driver code public static void main(String[] args){ // List of Lists ArrayList<List<Integer> > listOfLists = new ArrayList<List<Integer> >(); List<Integer> list1 = new ArrayList<Integer>(); list1.add(150); list1.add(210); listOfLists.add(list1); List<Integer> list2 = new ArrayList<Integer>(); list2.add(1); listOfLists.add(list2); List<Integer> list3 = new ArrayList<Integer>(); list3.add(200); list3.add(300); list3.add(400); listOfLists.add(list3); iterateUsingIterator(listOfLists); } }
输出
[ [ 150, 210, ], [ 1, ], [ 200, 300, 400, ], ]
结论
迭代二维列表(通常称为列表的列表)允许 Java 程序员分析存储在二维中的数据。
类似于棋盘,它提供了一种可适应的结构来对信息进行分类和导航。迭代二维列表可以通过两种方式之一完成:利用循环或迭代器。这两种方法都可以让您导航列表的行和列,以便有效地操作和分析数据。