标签: hashmap

Java HashMap性能优化/替代方案

我想创建一个大的HashMap,但put()性能不够好.有任何想法吗?

其他数据结构建议是受欢迎的,但我需要Java Map的查找功能:

map.get(key)

在我的情况下,我想创建一个包含2600万条目的地图.使用标准Java HashMap,在2-3百万次插入后,放置速率变得无法忍受.

此外,是否有人知道为密钥使用不同的哈希代码分发是否有帮助?

我的哈希码方法:

byte[] a = new byte[2];
byte[] b = new byte[3];
...

public int hashCode() {
    int hash = 503;
    hash = hash * 5381 + (a[0] + a[1]);
    hash = hash * 5381 + (b[0] + b[1] + b[2]);
    return hash;
}
Run Code Online (Sandbox Code Playgroud)

我使用add的associative属性来确保相等的对象具有相同的哈希码.数组是字节,其值在0到51之间.值只在一个数组中使用一次.如果a数组包含相同的值(按任意顺序),则对象相等,而b数组则相同.所以a = {0,1} b = {45,12,33}和a = {1,0} b = {33,45,12}是相等的.

编辑,一些说明:

  • 一些人批评使用哈希映射或其他数据结构来存储2600万个条目.我不明白为什么这看起来很奇怪.它看起来像是一个经典的数据结构和算法问题.我有2600万个项目,我希望能够快速将它们插入并从数据结构中查找它们:给我数据结构和算法.

  • 将默认Java HashMap的初始容量设置为2600万会降低性能.

  • 有些人建议使用数据库,在某些其他情况下这绝对是明智的选择.但我真的在问一个数据结构和算法的问题,一个完整的数据库会比一个好的数据结构解决方案过度而且速度慢得多(毕竟数据库只是软件,但会有通信和可能的磁盘开销).

java optimization performance hashmap map

98
推荐指数
7
解决办法
11万
查看次数

Java是否有反向查找的HashMap?

我的数据是以"密钥"格式组织的,而不是"键值".它就像一个HashMap,但我需要在两个方向上进行O(1)查找.这种类型的数据结构是否有名称,Java标准库中是否包含这样的名称?(或者可能是Apache Commons?)

我可以编写自己的类,基本上使用两个镜像映射,但我宁愿不重新发明轮子(如果这已经存在但我只是没有找到合适的术语).

java hashmap map bidirectional reverse-lookup

95
推荐指数
5
解决办法
5万
查看次数

是否可以通过其位置从HashMap获取元素?

如何通过HashMap的位置从HashMap中检索元素,它有可能吗?

java hashmap

92
推荐指数
6
解决办法
16万
查看次数

在Java中向HashMap添加空键或值有什么用?

HashMap允许一个空键和任意数量的空值.有什么用?

java null key hashmap

87
推荐指数
3
解决办法
10万
查看次数

Java比较两个列表

我有两个列表(不是java列表,你可以说两列)

例如

**List 1**            **Lists 2**
  milan                 hafil
  dingo                 iga
  iga                   dingo
  elpha                 binga
  hafil                 mike
  meat                  dingo
  milan
  elpha
  meat
  iga                   
  neeta.peeta    
Run Code Online (Sandbox Code Playgroud)

我想要一个返回多少元素相同的方法.对于这个例子,它应该是3,它应该返回类似的列表和不同值的值.

如果是,我应该使用hashmap然后用什么方法来获取我的结果?

请帮忙

PS:这不是学校的任务:)所以如果你只是指导我就足够了

java comparison list hashmap

86
推荐指数
7
解决办法
32万
查看次数

按键排序Go地图值

当迭代主题函数返回的代码中返回的映射时,键不按顺序出现.

如何让键按顺序/排序地图,以便键按顺序排列并且值对应?

这是代码.

hashmap go

84
推荐指数
3
解决办法
10万
查看次数

是否可以重命名Hashmap密钥?

我正在寻找一种重命名Hashmap密钥的方法,但我不知道它是否可以在Java中使用.

java hashmap

83
推荐指数
4
解决办法
7万
查看次数

如何有效地从HashMap中查找和插入?

我想做以下事情:

  • 查找Vec某个键,并将其存储起来供以后使用.
  • 如果它不存在,Vec则为该键创建一个空,但仍将其保留在变量中.

如何有效地做到这一点?当然我以为我可以使用match:

use std::collections::HashMap;

// This code doesn't compile.
let mut map = HashMap::new();
let key = "foo";
let values: &Vec<isize> = match map.get(key) {
    Some(v) => v,
    None => {
        let default: Vec<isize> = Vec::new();
        map.insert(key, default);
        &default
    }
};
Run Code Online (Sandbox Code Playgroud)

当我尝试它时,它给了我错误,如:

error[E0502]: cannot borrow `map` as mutable because it is also borrowed as immutable
  --> src/main.rs:11:13
   |
7  |     let values: &Vec<isize> = match map.get(key) {
   |                                     --- immutable borrow occurs …
Run Code Online (Sandbox Code Playgroud)

lookup hashmap rust

83
推荐指数
1
解决办法
1万
查看次数

HashMap Java 8实现

根据以下链接文档:Java HashMap Implementation

我对HashMap(或者更确切地说是增强HashMap)的实现感到困惑.我的疑问是:

首先

static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;
static final int MIN_TREEIFY_CAPACITY = 64;
Run Code Online (Sandbox Code Playgroud)

为什么以及如何使用这些常量?我想要一些明确的例子. 他们如何通过这个获得性能提升?

其次

如果您HashMap在JDK中看到源代码,您将找到以下静态内部类:

static final class TreeNode<K, V> extends java.util.LinkedHashMap.Entry<K, V> {
    HashMap.TreeNode<K, V> parent;
    HashMap.TreeNode<K, V> left;
    HashMap.TreeNode<K, V> right;
    HashMap.TreeNode<K, V> prev;
    boolean red;

    TreeNode(int arg0, K arg1, V arg2, HashMap.Node<K, V> arg3) {
        super(arg0, arg1, arg2, arg3);
    }

    final HashMap.TreeNode<K, V> root() {
        HashMap.TreeNode arg0 …
Run Code Online (Sandbox Code Playgroud)

java dictionary hashmap java-8

83
推荐指数
3
解决办法
2万
查看次数

使用R中的词典/列表

我有一个小问题:我在R中找不到字典数据结构,所以我使用了list而不是(比如"word" - > number)所以,现在我有问题如何获取键列表.有人知道吗?

lookup r list hashmap

82
推荐指数
7
解决办法
11万
查看次数