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