如何在 Java 中迭代 2D 列表(列表的列表)?

javaobject oriented programmingprogramming

可以使用称为 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 程序员分析存储在二维中的数据。

类似于棋盘,它提供了一种可适应的结构来对信息进行分类和导航。迭代二维列表可以通过两种方式之一完成:利用循环或迭代器。这两种方法都可以让您导航列表的行和列,以便有效地操作和分析数据。


相关文章