2012-04-26 4 views
0

ある高さと幅を持つ正方形Gridがあります。それにはクラスItemのメンバーが含まれています。 Itemには、特定の番号があります。Position一定の時間内にすべてのアイテムを特定の位置に取得したいと思っています。グリッド上に償却された一定の時間内にアイテムを置くことができるようにしたいと思います。特定の位置ですべての要素を取得するためのデータ構造

使用する位置(1つ以上のアイテムがある位置)に比例した量のメモリを使用しているときに、どのような(Java)構造がこれを行うことができますか?

+0

「位置」とは何ですか? –

+1

あなたの 'Grid'は固定サイズか、それとも動的に成長していますか? – Kai

+0

固定サイズです。 'Position'は、xとyの値(両方とも' long'型)を持つ位置のクラスです。グリッドは、サイズに比例しないアイテム(使用中の位置)を含む位置に比例したメモリを使用する必要があることを忘れていました。 – Fatso

答えて

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を使用しても、加算は一定時間償却されます。 に行くことをお勧めしますが、Gridにはまばらに入力される可能性があります(ArrayListは、常に割り当てられた2つのスペースで始まります)。

Gridを成長させる必要がある場合は、同じトリックを使用してください。ArrayListは、現在の幅/高さを維持し、さらに必要な場合には適切な値で利用可能なスペースを掛けます(2D配列の場合、可能性のある成長のタイプに依存します)。

関連する問題