你能在2d数组上创建一个Java Iterator吗?

时间:2011-09-10 06:36:06

标签: java arrays iterator

您是否可以创建一个迭代2d数组中所有空格的迭代器?

5 个答案:

答案 0 :(得分:3)

如果您实施Iterable界面,则可以使用for-each loop。可以找到相关示例here

答案 1 :(得分:2)

是的,将数组包装在一个对象中,并使该对象实现迭代器接口。所以它可以完成。我不知道任何与Jdk一起提供的迭代器。

答案 2 :(得分:1)

是的,正如@Scorpion所说,它可以完成。事实上,解决方案可能非常简单:不超过10行可执行代码......如果我正确理解了这个问题。

不,JDK中没有一种方便的方法可以做到这一点。而且我不知道任何“公共”图书馆中的一个。 (原因:这个特殊问题过于专业化,不适合少数程序员使用。)

这应该是您自己实施解决方案的充分答案。


我/我们应该为您提供盆栽解决方案吗?国际海事组织,没有。

  • StackOverflow不是“我们免费编写您的代码”服务。

  • 如果你自己做,你会了解更多:阅读优秀的"What have you tried?"博客文章。

(即使有人确实想为你编写代码,你也没有给出足够明确的问题描述来实现......没有做出很多猜测。)

答案 3 :(得分:1)

我没有看到在从数组中调用两个迭代器时需要制作单个迭代器的工作正常如下所示:

int 2dArray[][];
for(int 1dArray[]: 2dArray){
    for(int i: 1dArray){
        //do stuff
    }
}

答案 4 :(得分:0)

import java.util.LinkedList;
import java.util.Queue;

public class TwoDIterator {
int[][] array;
int outerCursor;
int lastArrayLen;
int totalElems;
int tracker = 1;
Queue<Integer> myQueue = new LinkedList<>();

public TwoDIterator(int[][] arr) {
    this.array = arr;
    this.outerCursor = 0;
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            totalElems += 1;
        }
    }
    for (int i = 0; i < array[0].length; i++) {
        myQueue.add(array[0][i]);
    }
}

public boolean hasNext() {
    return array.length > outerCursor && totalElems >= tracker;
}

public Integer next() {
    if (myQueue.isEmpty()) {
        outerCursor++;
        for (int i = 0; i < array[outerCursor].length; i++) {
            myQueue.add(array[outerCursor][i]);
        }
        if (!myQueue.isEmpty()) {
            tracker++;
            return myQueue.remove();
        }
    } else {
        tracker++;
        return myQueue.remove();
    }
    return -1;
}

public static void main(String[] args) {
    int[][] arr = { { 1, 2, 3 }, { 1, 3 }, { 1, 2, 5 } };
    TwoDIterator iter = new TwoDIterator(arr);
    while (iter.hasNext()) {
        System.out.println(iter.next());
    }
}
}