相关疑难解决方法(0)

617
推荐指数
11
解决办法
57万
查看次数

HashMap在同一个键下有多个值

我们是否可以使用一个键和两个值来实现HashMap.就像HashMap一样?

请帮助我,还告诉(如果没有办法)任何其他方式来实现三个值的存储,其中一个作为键?

java

189
推荐指数
8
解决办法
44万
查看次数

为什么在hashCode中使用素数?

我只是想知道为什么在类的hashCode()方法中使用素数?例如,当使用Eclipse生成我的hashCode()方法时,总会使用素数31:

public int hashCode() {
     final int prime = 31;
     //...
}
Run Code Online (Sandbox Code Playgroud)

参考文献:

这是关于Hashcode的一篇很好的入门文章和关于我如何找到哈希工作的文章(C#但概念是可转移的): Eric Lippert的GetHashCode指南和规则()

java primes hashcode

160
推荐指数
4
解决办法
6万
查看次数

单值映射Java的多个键

我认为我的问题与此类似:如何使用多个键实现Map?但有一个重要的区别.在那个问题中(如果我对它的理解是正确的,请告诉我,如果不是这样),键应该始终是唯一的.我希望在表单中有一个Map: MyMap ,其中键不一定是唯一的.如果这没有意义,我基本上想要一个二维数组,而不是通过坐标引用元素,我想通过成对的对象来引用它们.

任何人对这个有效的图书馆或自己实施的好方法都有任何想法吗?对于图书馆来说,我看过Apache Commons和Guava,似乎没有我想要的东西.

java map multidimensional-array data-structures

20
推荐指数
2
解决办法
4万
查看次数

多键映射 - 性能比较

上下文

我们的应用程序将大量数据存储在许多不同类型的映射中,以便快速查找.为了保持简单(并且不考虑原始地图),它总是带有一个或多个键的地图.性能是我们的一大要求.

问题

我想找到性能最好的地图实现,正如这里建议的那样,我对这些实现进行了比较:

  1. 基于java.util.HashMap的Maps(嵌套映射)专用于3个键的映射:

    Map<K1, Map<K2, Map<K3, V>>>
    
    Run Code Online (Sandbox Code Playgroud)
  2. java.util.HashMap中的包装密钥(元组作为键)

    Map<Triple<K1, K2, K3>, V>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 元组作为net.openhft.koloboke.collect.map.hash.HashObjObjMap中的键,根据应该是(一个)最快的映射.

    HashObjObjMap<Triple<K1, K2, K3>, V>
    
    Run Code Online (Sandbox Code Playgroud)

期望

  1. 嵌套地图将具有最快的GET和最慢的PUT.
  2. Koloboke哈希映射将比jdk HashMap更快.

结果

Benchmark                                                Mode  Cnt   Score   Error  Units
TupleVsNestedMapsBenchmark.benchGetFromNestedMap         avgt   20  11.586 ± 0.205  ns/op
TupleVsNestedMapsBenchmark.benchGetFromTupleKolobokeMap  avgt   20  18.619 ± 0.113  ns/op
TupleVsNestedMapsBenchmark.benchGetFromTupleMap          avgt   20   8.985 ± 0.085  ns/op
TupleVsNestedMapsBenchmark.benchPutToNestedMap           avgt   20  15.106 ± 0.142  ns/op
TupleVsNestedMapsBenchmark.benchPutToTupleKolobokeMap    avgt   20  22.533 ± 0.335  ns/op
TupleVsNestedMapsBenchmark.benchPutToTupleMap            avgt   20   8.884 ± 0.084  ns/op
Run Code Online (Sandbox Code Playgroud)

基准

@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(Mode.AverageTime)
@OperationsPerInvocation(100000) …
Run Code Online (Sandbox Code Playgroud)

java performance hashmap koloboke

5
推荐指数
1
解决办法
2310
查看次数

如何将这些相关索引组织成可以在Rust中高效查找的内容?

背景

在一种称为有限元方法的算法中,将连续区域离散化为具有一致几何的重复区域,在该区域上基于它们之间的连续性假设形成链接方程.

在这种情况下,我选择将形状划分为任意网格,现在我尝试将元素的值连接在一起,因为我遍历元素.这是我正在讨论的网格类型的示例:

示例网格改编自https://people.sc.fsu.edu/~jburkardt/m_src/fem2d_poisson_rectangle/rectangle_elements.png

指数

有一堆相关的指数:

  • 元素索引(蓝绿色数字),线性,行主要,范围0..ROWS*2.
  • 节点索引(棕色数字),线性,行主要,范围0..ROWS*COLS.
  • 局部元素顶点索引(淡紫色数字),按元素逆时针,范围0..2.
  • 空间中实际点的坐标(存储在元素的结构中,以及网格的结构)

问题

为了进入算法的下一步,我需要迭代每个节点并计算由局部元素索引索引的一些值的总和,并将它们存储在另一个矩阵中.例如,如果我在节点8上,我的元素查找/访问功能是一般的V(el_index, start_vertex, end_vertex),我的输出矩阵是S(start_node, end_node):

  1. S(8,8) = V(el_14, vert_1, vert_1) + V(el_15, vert_1, vert_1) + V(el_04, vert_0, vert_0) + V(el_03, vert_0, vert_0) + V(el_2, vert_2, vert_2) + V(el_13, vert_2, vert_2)
  2. S(8,9) = V(el_15, vert_1, vert_2) + V(el_4, vert_0, vert_2)

等等,对于来自节点8的所有连接(蓝绿色线).(连接是对称的,所以一旦我计算S(7,8),我就不需要计算S(8,7).)

问题是,网格(以及其他所有其他)在运行时被参数化,因此哪个节点索引+邻接方向对应于动态确定哪个元素索引.我需要告诉程序,"获取元素索引,其中节点索引vert_x是我当前的节点索引." 这是指示程序访问哪个元素的指令V().

有没有办法在Rust中以简单透明的方式将这些索引联系起来?

尝试

  1. 我尝试计算一些简单的算术函数,以模块节点矩阵的行步长为模,但结果很混乱,难以调试,并且需要详细的边界检查.
  2. 我尝试创建三个HashMap由每个三角形元素的不同顶点键入的s,保持每个顶点的值,但问题是相邻的三角形共享顶点数和空间坐标.
  3. 我考虑HashMap用多个键来键入一个键,但Rust文档没有说任何关于HashMap多键的说法.

iteration algorithm geometry hashmap rust

5
推荐指数
1
解决办法
112
查看次数