我有一個具有一定高度和寬度的方形Grid
。它包含類Item
的成員。每Item
有一定的Position
。我希望能夠在固定時間內將所有物品放置在特定位置,並且我希望能夠以攤銷的固定時間在網格上放置物品。數據結構獲取某個位置的所有元素
什麼(爪哇)結構可以做到這一點,同時使用與使用的位置數量成正比的內存量(位置上至少有一個項目)?
我有一個具有一定高度和寬度的方形Grid
。它包含類Item
的成員。每Item
有一定的Position
。我希望能夠在固定時間內將所有物品放置在特定位置,並且我希望能夠以攤銷的固定時間在網格上放置物品。數據結構獲取某個位置的所有元素
什麼(爪哇)結構可以做到這一點,同時使用與使用的位置數量成正比的內存量(位置上至少有一個項目)?
如果你的網格有一個固定的大小,我會使用一個數組。
Item[][] itemArray = new Item[3][3];
itemArray[0][0] = new Item();
System.out.println(itemArray[0][0]);
我想換行到類Grid
public final class Grid {
private Item[][] grid;
public Grid(int width, int height) {
grid = new Item[width][height];
}
public void setItemAt(Position position, Item item) {
int x = position.getX();
int y = position.getY();
grid[x][y] = item;
}
public Item getItemAt(Position position) {
int x = position.getX();
int y = position.getY();
return grid[x][y];
}
}
上面的用戶是正確的,在內部可以用數組。當然,它應該是List<Item>[][]
。無論您使用的是ArrayList
還是LinkedList
,加入的費用均爲固定時間。雖然我建議去LinkedList
,因爲你的Grid
很可能是人口稀少的(ArrayList
總是以一些已分配的空間開始)。
如果Grid
需要能夠增長,只需使用相同的技巧ArrayList
用途:跟蹤當前寬度/高度,如果您需要更多隻需將可用空間乘以合適的值(對於2D陣列,則加倍可能有點多,但這取決於可能的增長類型)。
'位置'是什麼? – 2012-04-26 08:20:53
你的'Grid'是否有固定的大小,還是動態增長? – Kai 2012-04-26 08:21:14
它有一個固定的大小。 '位置'是一類具有x和y值的位置(均爲「long」類型)。我忘了提及網格應該使用與其包含項目(使用位置)的位置成比例的內存,而不是與其大小成比例。 – Fatso 2012-04-26 08:41:18