Java 数据结构以获取特定位置的所有元素

Java 数据结构以获取特定位置的所有元素,java,memory-management,data-structures,hash,Java,Memory Management,Data Structures,Hash,我有一个正方形的网格,有一定的高度和宽度。它包含类项的成员。每个项目都有一个特定的位置。我希望能够在固定时间内得到某个位置上的所有项目,并且我希望能够在摊销固定时间内将一个项目放在网格上 什么(Java)结构可以做到这一点,而使用的内存量与使用的位置量成比例(位置上至少有一个项目)?如果网格大小固定,我将使用数组 Item[][] itemArray = new Item[3][3]; itemArray[0][0] = new Item(); System.out.println(itemAr

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


什么(Java)结构可以做到这一点,而使用的内存量与使用的位置量成比例(位置上至少有一个项目)?

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

Item[][] itemArray = new Item[3][3];
itemArray[0][0] = new Item();
System.out.println(itemArray[0][0]);
我会将其包装到类
网格中

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[][]
类型。无论您使用的是
ArrayList
还是
LinkedList
,添加都将按固定时间摊销。尽管我建议使用
链接列表
,但您的
网格
很可能是人烟稀少的(
ArrayList
总是以已分配的两个空格开始)


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

您的
网格是固定大小还是动态增长?它有固定大小<代码>位置
是一类具有x和y值的位置(类型均为
long
)。我忘了提到网格应该使用与其包含项目的位置(使用中的位置)成比例的内存,而不是与其大小成比例的内存。