Pile<Piece>[]
ジェネリックの配列です。Java の型消去により、これは Very Bad Thing™ です。代わりに、次のようにしてみてください。
// Initialize arrays.
ArrayList<Pile<Piece>> leftBoard = new ArrayList<Pile<Piece>>(16);
ArrayList<Pile<Piece>> rightBoard = new ArrayList<Pile<Piece>>(16);
// Fill arrays so we can use the "set" method.
leftBoard.add(Collections.<Pile<Piece>>nCopies(null));
rightBoard.add(Collections.<Pile<Piece>>nCopies(null));
// Store values.
for (int i = 3; i < 16; i++){
Pile<Piece> thisPiece = new Pile<Piece>();
leftBoard.set(i, thisPiece);
rightBoard.set(i, thisPiece);
}
for (int i = 0; i < 3; i++){
leftBoard.set(i, new Pile<Piece>());
}
for (int i = 0; i < 3; i++){
rightBoard.set(i, new Pile<Piece>());
}
ArrayList
動的にサイズ変更できるため(他の多くのことの中でも)、優れています。
簡単な要約: String[] array
ArrayList リストがある場合:
array[i]
と同じですlist.get(i)
array[i] = var
と同じですlist.set(i, var)
- で要素を最後に追加できます
list.add(var)
list.remove(index)
またはを使用して、どこからでも要素を削除できますlist.remove(var)
- 詳細については、件名の
ArrayList
ドキュメントまたはJava チュートリアルを参照してください。
編集:変更不可能なリストのトピックについて:
List<MyObject> l = Collections.unmodifiableList(myList);
l.get(0); // valid as long as element exists
l.get(0).foo(); // valid
l.get(0).setFoo(bar); // valid
l.remove(foo); // INVALID
l.add(foo); // INVALID
したがって、リスト内のオブジェクトを操作することはできますが、リスト内の位置やリスト自体の内容を変更することはできません。ロックダウンされた刑務所を想像してみてください。誰も出入りしていませんが、囚人と話すことはできます。
Pile
s をそのままにして、s を移動できるようにしたい場合はPiece
、変更不可能なリストが良いと思います。のようなメソッドがある限りsomePile.setPiece(somePiece)
、これはうまくいくはずです。