如何使用迭代器迭代二维ArrayList?

我想使用迭代器遍历包含String对象的二维ArrayList 。 我还想以一种方式迭代,让我选择是否要通过使用boolean值水平(行)首先或垂直(列)迭代。 我怎样才能在java中实现它?

到目前为止我尝试过的。

 public class IterateThis implements Iterator{ ArrayList<ArrayList> array; public IterateThis(){ array = new ArrayList<ArrayList>(); array.add(new ArrayList()); array.add(new ArrayList()); array.add(new ArrayList()); array.get(0).add("1"); array.get(0).add("2"); array.get(0).add("2"); array.get(1).add("4"); array.get(1).add("5"); array.get(1).add("6"); } Iterator it = array.iterator(); //This gives me an error...why? 

我不知道如何实现boolean值。

行式迭代很简单,如@Awfully Awesome答案所示。

尝试进行列式迭代,假设List将始终具有m cross n元素,其中m=n

 public static void IterateThis() { ArrayList> array = new ArrayList>(); array.add(new ArrayList()); array.add(new ArrayList()); array.get(0).add("1"); array.get(0).add("2"); array.get(0).add("2"); array.get(1).add("4"); array.get(1).add("5"); array.get(1).add("6"); Iterator> it = array.iterator(); int topLevelIteratorResetCounter = 0; int noOfIteratorNextRequired = 1; int size = array.size(); while (it.hasNext()) { ArrayList strList = it.next(); if (noOfIteratorNextRequired > strList.size()) break; Iterator itString = strList.iterator(); int numtimes = 0; String str = null; while (numtimes != noOfIteratorNextRequired) { str = itString.next(); numtimes++; } System.out.println(str); numtimes = 0; topLevelIteratorResetCounter++; if (topLevelIteratorResetCounter == size) { //as column count is equal to column size it = array.iterator(); //reset the iterator noOfIteratorNextRequired++; topLevelIteratorResetCounter = 0; } } } 

答案使用Iterator。

也许您需要实现两个版本,使用boolean来决定使用哪个循环:

 public void iterate(boolean horizantalFirst){ if(horizontalFirst){ for(int i=0; i 

为什么不试试这个:

 import java.util.ArrayList; public class Iteration { private ArrayList> array; public Iteration() { array = new ArrayList<>(); array.add(new ArrayList()); array.get(0).add("000"); array.get(0).add("001"); array.get(0).add("010"); array.add(new ArrayList()); array.get(1).add("100"); array.get(1).add("101"); array.get(1).add("110"); array.get(1).add("111"); iterateRowWise(); System.out.println("\n\n"); iterateColumnWise(); } public void iterateRowWise() { // This uses iterator behind the scene. for (ArrayList row : array) { for (String element : row) { System.out.print(element + " "); } System.out.println(); } } public void iterateColumnWise() { int arraySize = array.size(); int maxColumns = getMaximumListSize(); for (int c = 0; c < maxColumns; c++) { for (int r = 0; r < arraySize; r++) { ArrayList rowList = array.get(r); if (c < rowList.size()) { System.out.print(rowList.get(c) + " "); } } System.out.println(); } } private int getMaximumListSize() { int maxListSize = 0; for (ArrayList rowList : array) { if (maxListSize < rowList.size()) maxListSize = rowList.size(); } return maxListSize; } public static void main(String[] args) { new Iteration(); } } 

iterateRowWise()方法使用迭代器进行迭代,但它在场景后面进行迭代。
iterateColumnWise()方法不使用迭代器,但可以安全使用。