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[] arrayArrayList リストがある場合:
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
したがって、リスト内のオブジェクトを操作することはできますが、リスト内の位置やリスト自体の内容を変更することはできません。ロックダウンされた刑務所を想像してみてください。誰も出入りしていませんが、囚人と話すことはできます。
Piles をそのままにして、s を移動できるようにしたい場合はPiece、変更不可能なリストが良いと思います。のようなメソッドがある限りsomePile.setPiece(somePiece)、これはうまくいくはずです。