问题标签 [trove4j]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
3181 浏览

java - 为什么不允许外部接口为 HashMap 提供 hashCode/equals?

使用 aTreeMap提供 custom 是微不足道的Comparator,从而覆盖Comparable添加到地图的对象提供的语义。HashMap但是不能以这种方式控制 s;提供散列值和相等性检查的函数不能被“侧载”。

我怀疑设计一个界面并将其改造成HashMap(或一个新类)既容易又有用?像这样的东西,除了更好的名字:

不区分大小写Map的问题得到了一个简单的解决方案:

这是否可行,或者你能看到这种方法的任何基本问题吗?

是否在任何现有(非 JRE)库中使用了该方法?(试过谷歌,没有运气。)

编辑:hazzen 提出了很好的解决方法,但恐怕这是我试图避免的解决方法...... ;)

编辑:将标题更改为不再提及“比较器”;我怀疑这有点令人困惑。

编辑:接受与性能相关的答案;会喜欢更具体的答案!

编辑:有一个实现;请参阅下面接受的答案。

编辑:改写第一句以更清楚地表明这是我所追求的侧载(而不是排序;排序不属于 HashMap)。

0 投票
2 回答
545 浏览

java - 如何返回 Java Trove 集合的不可修改视图?

我想在一些 Trove 集合周围放置不可修改的包装器:我检查了 Trove 文档,但似乎找不到简单的方法(我可能忽略了一些明显的东西)。

因此,到目前为止,每次我需要这样一个不可修改的包装器时,我都会扩展 Trove 集合(例如TIntLongHashMap)并将所有只读调用委托给 Trove 包装的主题,并在每个尝试修改集合的方法中抛出UnsupportedOperationException .

有没有更简单的方法?

注意:这个问题与默认 Java 集合无关,在这种情况下,我对默认 Java 集合和其他 Java 集合都不感兴趣:这个问题专门针对 Trove。

0 投票
2 回答
1464 浏览

java - Java中HashTable的自定义实现?

我正在解决Quora 问题,对于我的特定解决方案,我需要一个哈希表(长键、整数值)来缓存值。我希望 Java HashMap 可以改进,因为我知道键和值的数据类型,它们是原语,也是我的问题空间。我决定天真地继续使用“链表数组”结构实现一个简单的哈希表(甚至我的链表也是我自己实现的 Node 类)。但我注意到我自己的幼稚实现比通用 Java HashMap 慢了大约 4 倍。我还尝试使用Trove 的 LongToIntMap库来看看他们做了什么。有没有人有任何好的建议来在 Java 中构建一个自定义的 Long to Int 哈希表,它的性能明显优于 Java HashMap?

0 投票
2 回答
4140 浏览

java - Trove 库是线程安全的吗?

GNU trove 库是线程安全的吗?我对 TObjectDoubleHashMap 特别感兴趣。我查看了他们的文档,但没有提到任何内容,所以我们是否应该假设它不是线程安全的?

0 投票
6 回答
440 浏览

java - 这种锁定技术的名称是什么?

我有一个巨大的 Trove 地图和一个我需要经常从多个线程调用的方法。大多数情况下,此方法应返回true。线程正在进行大量的数字运算,我注意到由于以下方法而存在一些争用(这只是一个示例,我的实际代码有点不同):

请注意,它是一个“仅附加”映射:一旦添加了一个键,它就会永远保留在那里(这对我认为接下来发生的事情很重要)。

我注意到通过将上述内容更改为:

我的数字运算速度提高了 20%(经过大量运行、长时间运行等验证)。

这种优化看起来是否正确(知道一旦有密钥,它将永远留在那里)?

这种技术的名称是什么?

编辑

更新地图的代码调用频率低于containsSpecial()方法,看起来像这样(我已经同步了整个方法):

0 投票
1 回答
289 浏览

java - Trove 哈希映射未实现 hashCode

我偶然发现了TObjectDoubleHashMaptrove 的问题。2.0.2 版不会覆盖该hashCode方法。

trove (3.0.0) 的更新版本包括hashCode.

请注意,该equals方法在两个版本中都被覆盖。

为什么hashCode版本 2 中没有覆盖该方法?hashCode也许覆盖/的合同equals是在最初编写 trove 地图之后引入的?还是只是违反合同和后来修复的错误?如果它是一个错误而不是一个功能,我会感到非常惊讶,因为主要处理散列的类为什么没有覆盖hashCodeequals

0 投票
4 回答
975 浏览

java - 需要一个在添加和删除时不会产生任何垃圾的高效 Map 或 Set

因此,由于 Javolution 不起作用(请参见此处),我非常需要一个高效且在简单使用下不会产生垃圾的 Java Map 实现。java.util.Map添加和删​​除键时会产生垃圾。我检查了 Trove 和 Guava,但看起来他们没有 Set<E> 实现。我在哪里可以找到一个简单而有效的替代方案java.util.Map

编辑 EJP:

条目对象在添加条目时分配,在删除条目时释放给 GC。:(

0 投票
1 回答
2384 浏览

java - Java Hash Multi Map(具有多个值的键)实现

这里,我发现 ColtOpenIntIntHashMap和 Trove 的TIntIntHashMap性能和内存使用比 Java 内置HashMap或 Guava更好HashMultimap

Colt'sOpenIntIntHashMap或 Trove's 是否TIntIntHashMap允许具有多个值的键,如HashMultimap? 如果不是,那么HashMultimap实现 Colt 或 Trove 的性能和内存效率的好方法是什么?

注意:我已经测试过 Guava 的HashMultimap,但它的性能和内存效率对我来说似乎很差。

0 投票
5 回答
357 浏览

java - 用于存储原始整数的集合,允许更快的 contains() 和有序迭代

我需要一个节省空间的集合来存储大量基元int(s)(大约 800,000 个整数),它允许快速操作contains()& 允许按定义的顺序进行迭代。

contains()检查列表中是否存在 int 的更快操作是主要优先事项,因为这种操作非常频繁。


我愿意使用广泛使用和流行的 3rd 方库,如 Trove、Guava 等。

我看过 Trove 的TIntSet,但我相信这不会让我定义迭代的顺序。

编辑:

集合的大小约为 800,000 个整数。集合中的值范围将从 0 到Integer.Max_VALUE. 迭代的顺序实际上应该基于我将值添加到集合的顺序,或者我可能只是提供一个有序的 int[] 并且它应该以相同的顺序进行迭代。

0 投票
1 回答
531 浏览

java - 有什么方法可以为 trove 的 TIntHashSet 或 TIntIntHashMap 定义迭代顺序?

我可以以某种方式定义 Trove 的TIntHashSet中元素的迭代顺序吗?

Set或者是允许定义元素迭代顺序的任何其他原语。我想以插入顺序或与用于构造集合的数组相同的顺序迭代元素。