首页 > 解决方案 > 如何在 Java 中有效地存储一组元组/对

问题描述

我需要检查长值和整数值的组合是否已经在应用程序的性能非常关键的部分中出现过。这两个值都可能变得非常大,至少在某些情况下 long 会使用超过 MAX_INT 的值。

目前我有一个使用 a 的非常简单的实现Set<Pair<Integer, Long>>,但是这将需要太多的分配,因为即使对象已经在集合中,像seen.add(Pair.of(i, l))添加/检查存在这样的东西也会为每个调用分配 Pair。

Java 中是否有更好的方法(没有 Guava、Trove 或 Apache Commons 等库),以最少的分配和良好的方式进行检查O(?)

两个 int 会很容易,因为我可以将它们组合成一个 long 在 Set 中,但 long 在这里无法避免。

有什么建议么?

标签: javaperformancesettuples

解决方案


如何创建一个包含两个原语的类呢?您至少会删除64 位 JVM24 bytes的标头Integer和其中的标头。Long

在这种情况下,您正在寻找配对功能,或从 2 个号码中生成一个唯一号码。该维基百科页面有一个很好的例子(而且很简单)这种可能性。


推荐阅读