在Java中快速存储和检索点(相关的x和y)。列表与数组

在Java中快速存储和检索点(相关的x和y)。列表与数组,java,optimization,linked-list,2d,hashmap,Java,Optimization,Linked List,2d,Hashmap,我正在尝试用Java重新创建一个棋盘游戏,其中包括存储一组可以放置棋子的有效位置(用于AI)。我想,如果我有一个X坐标的数组/列表/字典,其中有一个y坐标的数组/列表,那么它的运行速度可能会更快,而不是存储为一个点列表,因此一旦你找到了X坐标,你只需要检查它的Ys,而不是所有剩余的点” 我的问题是,我必须经常更改有效点。我提出了一些可能的解决方案,但难以选择/实施: HashMap,其中X作为整数键,Ys作为ArrayList。 问题:每次添加X时,我都必须创建一个新的ArrayList 我

我正在尝试用Java重新创建一个棋盘游戏,其中包括存储一组可以放置棋子的有效位置(用于AI)。我想,如果我有一个X坐标的数组/列表/字典,其中有一个y坐标的数组/列表,那么它的运行速度可能会更快,而不是存储为一个点列表,因此一旦你找到了X坐标,你只需要检查它的Ys,而不是所有剩余的点”

我的问题是,我必须经常更改有效点。我提出了一些可能的解决方案,但难以选择/实施:

  • HashMap,其中X作为整数键,Ys作为ArrayList。
    • 问题:每次添加X时,我都必须创建一个新的ArrayList
    • 我也不确定HashMap的运行时性能
  • int[X][Y]阵列初始化为电路板大小,每个点设置为其相对位置(点2,3设置[2][3])未设置点为无效整数。
    • 问题:我必须遍历所有点并检查每个点
  • 点列表这只是点的链接/数组列表。
    • 问题:列表比数组慢
    • 使用点的链接列表与像上面那样检查整个数组相比,效果如何

也许我应该使用二维链表?运行时最快的方法是什么?

您担心的是错误的事情。访问集合/映射/数组项的速度非常快。图形部分将对性能更加敏感。只要使用最自然的数据结构即可。无论如何,你不太可能储存足够的物品来真正发挥作用。首先构建它,然后找出性能问题的真正所在。

您担心的是错误的事情。访问集合/映射/数组项的速度非常快。图形部分将对性能更加敏感。只要使用最自然的数据结构即可。无论如何,你不太可能储存足够的物品来真正发挥作用。首先构建它,然后找出性能问题的真正所在。

如果使用数组点列表,则性能与数组(Java)几乎相同


我认为这是最快的解决方案,因为正如您已经提到的,您必须遍历完整的int数组和HashMap,并且依赖的ArrayLists必须根据更改/添加坐标进行更改。如果您使用点的ArrayList,您的性能几乎与数组(在Java中)相同


我认为这是最快的解决方案,因为正如您已经提到的,您必须遍历完整的int数组和HashMap,并且依赖的arrayList必须根据更改/添加坐标来更改

您是否尝试过最简单的代码,但发现它的性能不够好?这个板有多大,你需要多久做一次这样的事情?你有没有尝试过最简单的代码,但发现它的性能不够好?这个板有多大,你需要多久做一次这样的事情?如果你隐藏了实现细节,如果它成为一个问题,你可以在以后更改它。如果你隐藏了实现细节,如果它成为一个问题,你可以在以后更改它。