Java:元组上的 "iterator"

标签 java iterator inner-classes

我有一个类(class)学生,其中有一个成员 bigTable类型 ArrayList<ArrayList<Integer>> 。如果我们将其想象为一个矩阵,我希望能够迭代特定的列,在某些迭代器初始化中作为参数给出。另外,我希望迭代器有两种方法, getValuegetPosition 。即类似:

1 2 3
9 8 6
3 4 5

Student student = newStudent()
SomeType(what??) it = student.iterator(1);
it.getValue() // returns 2
it.getPosition() // returns 0
it.next() // moves to next position
it.getValue() // returns 8
it.getPosition() // returns 1
...

这个界面只是一个建议。我正在考虑通过创建一个内部类来在 Student 中实现迭代器模式。但是返回内部类的引用是否合适?事实上,如果我想将迭代器作为参数传递给某人,我应该说它是什么类型? (内部类不可见)...

有没有更优雅的方式来完成这个任务?

另外,我想知道,如果我返回整行(一个 ArrayList,在这种情况下 Student 可以实现 Iterator 接口(interface)),它会占用额外的内存吗(我的意思是它会被复制还是只是传递一个引用?)

最佳答案

返回内部类的实例是提供 Iterator 的常见方式- 请参阅java.util许多示例的源代码。

我认为偏离正常Iterator接口(interface)会造成不必要的困惑,特别是当您调用返回它的方法“迭代器”时。

如果你想要iterator()结果让你得到 getValue() 的东西和getPosition()方法,用这些方法声明一个接口(interface)。我将其称为ElementData - 您可以为您的情况想出一个更有意义的名称。您的iterator()然后方法可以返回 Iterator<ElementData> .

您的代码将变为:

Student student = newStudent()
Iterator<ElementData> it = student.iterator(1);
ElementData element;
element = it.next()
element.getValue() // returns 2
element.getPosition() // returns 0
element = it.next() // moves to next position
element.getValue() // returns 8
element.getPosition() // returns 1

关于Java:元组上的 "iterator",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443281/

相关文章:

java - JUnit 测试 JTable 单元格工具提示

java - 如何在 Android 中以编程方式设置应用程序主题?

c++ - 有什么方法可以检查迭代器是否有效?

c++ - 我该如何修复错误 : conversion from ‘void’ to non-scalar type ‘std::vector<int>’ requested

Java 方法到文件

java - 使用套接字的 HTTP 响应中的随机字符

java - 无法在内部类中引用/修改非最终变量

java - 为什么我不能在 Java 的内部类中创建枚举?

ruby - 在循环中初始化一个变量

java - 通过反射创建包含匿名内部类的类的对象