1

我有一个学生类,它有一个bigTable类型的成员ArrayList<ArrayList<Integer>>。如果我们把它想象成一个矩阵,我希望能够迭代一个特定的列,在一些迭代器初始化中作为参数给出。另外,我希望迭代器有 2 个方法,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 接口)会占用额外的内存(我的意思是它会被复制还是只是传递一个引用?)

4

1 回答 1

1

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

我认为偏离正常Iterator界面会造成不必要的混乱,特别是如果您调用返回它的方法“迭代器”。

如果您希望iterator()结果让您使用getValue()getPosition()方法获得某些东西,请声明带有这些方法的接口。我会这样称呼它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
于 2013-03-15T23:16:58.737 回答