1

bigTableタイプのメンバーがいるクラスStudentがありArrayList<ArrayList<Integer>>ます。それを行列として想像すると、イテレータの初期化でパラメータとして指定された特定の列を反復できるようにしたいと思います。getValueまた、イテレータには2つのメソッドが必要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()ElementDataiterator()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 に答える