【问题标题】:Storing and Retrieving points (related x and y) quickly in Java. List vs Array在 Java 中快速存储和检索点(相关的 x 和 y)。列表与数组
【发布时间】:2011-10-20 06:17:19
【问题描述】:

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

我遇到的麻烦是我必须经常更改有效点。我想出了一些可能的解决方案,但难以选择/实施它们:

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

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

【问题讨论】:

  • 您是否尝试过最简单的代码,但发现它的性能不够好?这块板有多大,你需要多久做一次这种事情?

标签: java optimization linked-list 2d hashmap


【解决方案1】:

您担心的是错误的事情。访问集合/地图/数组项目非常快。图形部分将对性能更加敏感。只需使用最自然的任何数据结构。无论如何,您不太可能存储足够的物品来真正重要。先构建它,然后找出性能问题的真正原因。

【讨论】:

  • 如果您隐藏了实现细节,您可以在以后出现问题时进行更改。
【解决方案2】:

如果您使用 ArrayList of Points,您的性能几乎与使用数组(在 Java 中)相同

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2019-10-06
    • 2017-10-02
    • 2012-07-13
    相关资源
    最近更新 更多