相关疑难解决方法(0)

可变的hashmap键是危险的做法吗?

将可变对象用作Hashmap键是不好的做法吗?当您尝试使用已修改足以更改其哈希码的密钥从Hashmap检索值时会发生什么?

例如,给定

class Key
{
    int a; //mutable field
    int b; //mutable field

    public int hashcode()
        return foo(a, b);
    // setters setA and setB omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)

用代码

HashMap<Key, Value> map = new HashMap<Key, Value>();

Key key1 = new Key(0, 0);
map.put(key1, value1); // value1 is an instance of Value

key1.setA(5);
key1.setB(10);
Run Code Online (Sandbox Code Playgroud)

如果我们现在打电话map.get(key1)怎么办?这是安全的还是可取的?或者行为是否依赖于语言?

hash key hashmap mutable hashcode

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

可以将java数组用作HashMap键

如果HashMap的键是一个字符串数组:

HashMap<String[], String> pathMap;
Run Code Online (Sandbox Code Playgroud)

您可以使用新创建的字符串数组访问地图,还是必须是相同的String []对象?

pathMap = new HashMap<>(new String[] { "korey", "docs" }, "/home/korey/docs");
String path = pathMap.get(new String[] { "korey", "docs" });
Run Code Online (Sandbox Code Playgroud)

java arrays hashmap

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

来自一个字段的Java hashCode

编辑:准备我的对象以便在HashMap中使用.

在阅读了一下如何生成哈希码之后,我现在很困惑.我的(可能是微不足道的)问题是,当我有一个可以使用的字段时,我应该如何实现hashCode方法?我可以直接使用fiels吗?如果我理解正确的话,hashCode的值在对象的生命周期内不能改变,我只有一个适合这个的ID,但是我已经在其他地方读过,那个人不应该使用ID ...这个怎么样,怎么样一个基于这个(唯一且没有变化)值的hashCode函数会是什么样的?equals方法也仅基于id ..

java hashcode

6
推荐指数
1
解决办法
3729
查看次数

如何使TreeMap与数组一起使用?

类似的问题请参阅:如何使HashMap与数组一起使用?

但我需要TreeMap ((int key1, int key2) -> String),key1然后比较key2.

我的解决方案是:

    Map<int[], String> map = new TreeMap<>(Comparator.
            <int[]>comparingInt(key -> key[0]).thenComparingInt(key -> key[1]));
Run Code Online (Sandbox Code Playgroud)

但是当我需要时((int key1, int key2, int key3) -> String,我必须写更多.

有没有办法为任意长度的数组生成Comparator?

java arrays lambda treemap java-8

5
推荐指数
2
解决办法
932
查看次数

标签 统计

java ×3

arrays ×2

hashcode ×2

hashmap ×2

hash ×1

java-8 ×1

key ×1

lambda ×1

mutable ×1

treemap ×1