代码之家  ›  专栏  ›  技术社区  ›  yclian

用Java写一次+读多张地图?

  •  5
  • yclian  · 技术社区  · 16 年前

    我有一个要求,一张地图最多可以包含50~200个条目(可能更多,无论如何我们都不能称之为太少)。写入只完成一次,读取(使用Map.get(“keyName”))每个请求可以超过20次(这是一个Web应用程序)。

    6 回复  |  直到 16 年前
        1
  •  7
  •   MarkusQ    16 年前

    除非你真的有性能问题(并将其追溯到这段代码),否则我不会担心。

    在我试图替换Map之前,我会看看为什么我需要做4000次查找(200个条目,每次20次读取)来生成一个网页。

    但我敢打赌,与该过程的其他部分相比,进行这4000次查找的时间将微不足道。

        2
  •  2
  •   TofuBeer    16 年前

    如果所有写入都在任何读取之前完成,那么您可以使用 Collectons.unmodifiableMap 方法。

    如果不是这样,那么编写代码来做你想做的事情并不难(四处寻找包含基本代码的帖子……)

    嗯……只是为了确定问题是我在想什么。..只读方面是重要的部分,还是试图快速访问数据是最重要的部分?

    编辑:(基于评论)

    你有没有用分析器检查过代码是否很慢?如果没有,那么你现在还不应该担心。

        3
  •  1
  •   Ron    16 年前

    如果这真的是一个瓶颈,我会考虑调整地图的大小以避免冲突。

        4
  •  1
  •   Darius Bacon    16 年前

    如果真的值得麻烦,你可以试试 perfect hashing 。不过,我对任何Java实现都不熟悉。

        5
  •  0
  •   ReneS    16 年前

    如果你严格写在开头,在阅读器启动之前,那么跨线程的同步和共享就不是问题。..HashMap是你的朋友。当你对此不确定时:ConcurrentHashMap。

    这两个实现都是JDK的一部分。

        6
  •  0
  •   Uri    16 年前

    几年前(作为一个学校项目),我在C中实现了一个一次写入多读映射(和其他集合),它采用了一个现有的集合,然后通过创建一个更高效的内存和缓存表示来“密封”它(例如,一个图被存储为优化的数组)。我们看到了惊人的性能差异。

    由于Java支持接口,实现这样的东西会容易得多(事实上是鼓励的),但我不熟悉开箱即用的实现。