Pile<Piece>[]
是一个泛型数组。由于 Java 中的类型擦除,这是非常糟糕的事情™。相反,尝试这样的事情:
// 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 保留在原处但能够移动Piece
s,那么一个不可修改的列表对我来说听起来不错。只要您有类似的方法somePile.setPiece(somePiece)
,这应该可以正常工作。