繁体   English   中英

数据结构使所有元素处于特定位置

[英]Data Structure to get all elements at certain position

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

当使用与使用的位置(上面至少包含一项的位置)的数量成比例的内存量时,什么(Java)结构可以做到这一点?

如果您的网格大小固定,我将使用数组。

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数组,可能需要加倍很多,但这取决于可能的增长类型)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM