2012-04-26 32 views
0

我有一個具有一定高度和寬度的方形Grid。它包含類Item的成員。每Item有一定的Position。我希望能夠在固定時間內將所有物品放置在特定位置,並且我希望能夠以攤銷的固定時間在網格上放置物品。數據結構獲取某個位置的所有元素

什麼(爪哇)結構可以做到這一點,同時使用與使用的位置數量成正比的內存量(位置上至少有一個項目)?

+0

'位置'是什麼? – 2012-04-26 08:20:53

+1

你的'Grid'是否有固定的大小,還是動態增長? – Kai 2012-04-26 08:21:14

+0

它有一個固定的大小。 '位置'是一類具有x和y值的位置(均爲「long」類型)。我忘了提及網格應該使用與其包含項目(使用位置)的位置成比例的內存,而不是與其大小成比例。 – Fatso 2012-04-26 08:41:18

回答

1

如果你的網格有一個固定的大小,我會使用一個數組。

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]; 
    } 
} 
0

上面的用戶是正確的,在內部可以用數組。當然,它應該是List<Item>[][]。無論您使用的是ArrayList還是LinkedList,加入的費用均爲固定時間。雖然我建議去LinkedList,因爲你的Grid很可能是人口稀少的(ArrayList總是以一些已分配的空間開始)。

如果Grid需要能夠增長,只需​​使用相同的技巧ArrayList用途:跟蹤當前寬度/高度,如果您需要更多隻需將可用空間乘以合適的值(對於2D陣列,則加倍可能有點多,但這取決於可能的增長類型)。