数据结构将所有元素放在特定位置

时间:2012-04-26 08:17:55

标签: java memory-management data-structures hash

我有一个正方形Grid,有一定的高度和宽度。它包含类Item的成员。每个Item都有一定的Position。我希望能够在恒定时间内将所有物品放在某个位置,并且我希望能够以摊销的恒定时间将物品放在网格上。

什么(Java)结构可以使用与使用位置数量成比例的内存量(位置上至少有1个项目)?

2 个答案:

答案 0 :(得分: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];
    }
}

答案 1 :(得分:0)

上面的用户是正确的,你可以在内部使用数组。当然它应该是List<Item>[][]类型。无论您使用ArrayList还是LinkedList,添加都将按照常量时间摊销。虽然我建议使用LinkedList,因为您的Grid可能会被稀疏填充(ArrayList始终以已经分配的几个空格开始)。

如果Grid需要能够增长,只需​​使用相同的技巧ArrayList使用:跟踪当前的宽度/高度,如果需要更多,只需将可用空间乘以适当的值(对于2D数组,加倍可能有点多,但这取决于可能的增长类型。)