小编cai*_*sil的帖子

为什么返回 (h = key.hashCode()) ^ (h >>> 16) 而不是 key.hashcode ?

我不认为这种方法可以避免碰撞。我认为如果key.hashcode大于table.length,就会发生冲突。

\n\n

更新\xef\xbc\x9a\n实际上我参考了HashMap#hashJDK 1.8 中的 ,并且对向下扩展高位的好处有点困惑。\n现在,我想在这个链接的帮助下我已经清楚了,好处是:

\n\n
    \n
  • 我们不需要进行%计算,而是使用更快速的方式——位移位。
  • \n
\n\n

对于冲突来说,如果key的数量大于表的长度,那么无论使用什么哈希方法都会发生冲突。

\n

java hashmap

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

为什么map.vaules上的迭代器可以用来删除HashMap#Entry?

我正在尝试删除值为的所有条目null.代码是:

Map<String, String> map = new HashMap<>();
map.put("one", null);
map.put("two", null);
map.put("three", "THREE");

Iterator iterator = map.values().iterator();
while (iterator.hasNext())
{
    if (iterator.next() == null) {
        iterator.remove();
    }
}

for (Map.Entry<String, String> e : map.entrySet()) {
    System.out.println(e.getKey() + ":" + e.getValue());
}
Run Code Online (Sandbox Code Playgroud)

我的问题是iterator绑定map.values,为什么它可以删除整个条目?

java iterator hashmap

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

Java中等式"i ++ + ++ i"的计算顺序是什么?

考虑一下片段:

int a = 1, b = 1, c = 1;
System.out.println(a + ++a);
System.out.println(b++ + ++b);
System.out.println(c++ + c);
Run Code Online (Sandbox Code Playgroud)

输出是:

3
4
3
Run Code Online (Sandbox Code Playgroud)

这是我认为正在发生的事情,但输出不匹配:

1. ++a -> +a -> 4 = 2 + 2
2. ++b -> +b -> 4 = 2 + 2
3. c -> +c -> 2 = 1 + 1
Run Code Online (Sandbox Code Playgroud)

java increment operators operator-precedence

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

ETA的缩写是什么?

我只是从eta扩展中找到了一些间接线索

SimpleExpr :: = SimpleExpr1`_
'如果表达式_是方法类型或如果是按名字调用参数,则表达式_的格式正确。
如果是带有参数的方法,则_表示通过eta扩展转换为函数类型。
如果是类型=>的无参数方法或按名称调用参数,则_表示类型()=>的函数,该函数评估何时将其应用于空的参数列表()。

所以我猜eta是匿名函数表达的缩写吗?我对吗?

scala terminology lambda-calculus

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

[1] int {}和[] int {0}有什么区别

我试图array在other中进行更改func,然后返回更改。因此,我在下面编写了一个示例代码,我的问题是为什么changeArr02函数的更改会影响原点,arrchangeArr01不会影响原点。

package main

import "fmt"

func changeArr01(arr [1]int) {
        arr[0] = -100
}

func changeArr02(arr []int) {
        arr[0] = -200
}

func main() {
        arr01 := [1]int{}
        changeArr01(arr01)
        fmt.Println(arr01) // 0

        arr02 := []int{0}
        changeArr02(arr02)
        fmt.Println(arr02) // -200
}
Run Code Online (Sandbox Code Playgroud)

go

-4
推荐指数
1
解决办法
66
查看次数