あなたは2つのものを混ぜています:
配列の構築
プレーン配列は非常に低レベルです。メソッドはなく、長さは作成後に固定されます。
MyType[] anArray = new MyType[10];
ArrayList の構築
ArrayList は Collection の型の単なる実装です
Collection<MyItemType> aCollection = new ArrayList<MyItemType>();
あなたの場合はどうしますか?
コレクションの単純な配列が必要です (実装は ArrayList です)。そう:
// Create the array, use the interface in case you need to change the implementation later on
Collection<Point>[] touchPoints = (Collection<Point>) new Collection[2];
// Create each collection within that array, using the ArrayList implementation
touchPoints[0] = new ArrayList<Point>();
touchPoints[1] = new ArrayList<Point>();
それをより良くする方法は?
単純な配列が必要な理由を考えてみてください。
- 要素が 2 つだけで、常に固定されている場合は、2 つのメンバー変数を作成するだけです。
- 数が異なる場合は、コレクションのコレクションを作成するだけです (コレクション>)
ユースケースを考慮して編集します。
ユーザー入力を保持するクラスを作成するだけです。
class UserInput {
public UserInput() {
user1TouchPoints = new ArrayList<Point>();
user2TouchPoints = new ArrayList<Point>();
}
// Add accessors and all
private Collection<Point> user1TouchPoints;
private Collection<Point> user2TouchPoints;
}
より多くのプレーヤーを計画している場合は、マップを使用してください
class UserInput {
public UserInput() {
usersTouchPoints = new HashMap<Integer, Collection<Point>>();
}
public Collection<Point> getUserTouchPoints(Integer userId) {
return usersTouchPoints.get(userId);
}
public void addUserTouchPoints(Integer userId, Collection<Point> input) {
Collection<Point> points = usersTouchPoints.get(userId);
if (points==null) {
points = new ArrayList<Point>();
userTouchPoints.put(userId, points);
}
points.addAll(input);
}
// Maps a user ID (or index) to its touch points
// If you are using Android, use SparseArray instead of Map, this is more efficient
private Map<Integer, Collection<Point>> usersTouchPoints;
}