繁体   English   中英

您可以在二维数组上创建Java迭代器吗?

[英]Can you create a Java Iterator over a 2d array?

您是否可以创建一个将遍历二维数组中所有空间的迭代器?

如果实现Iterable接口,则可以使用for-each loop 相关示例可以在此处找到。

是的,将数组包装在一个对象中,并使该对象实现迭代器接口。 这样就可以了。 我不知道Jdk随附的任何此类迭代器。

我不认为从数组调用两个迭代器时需要制作单个迭代器,按示例所示就可以了:

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

是的,可以做到,正如@Scorpion所说。 实际上,解决方案可能非常简单:如果我正确理解问题,则可执行代码不超过10行。

不,JDK中没有方便的方法可以做到这一点。 而且我不知道任何“常见”库中的一个。 (原因:这个特殊的问题过于专业化,无法对少数程序员有用。)

对于您自己实施解决方案,这应该是一个足够的答案。


我/我们是否应该为您提供盆栽解决方案? 海事组织,不。

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

  • 如果您自己做,则将学到更多:阅读出色的“您尝试了什么?” 博客文章。

(即使有人确实想为您编写代码,您也没有给出足够清晰的描述来实施该问题……而无需进行大量猜测。)

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());
    }
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM