为什么此循环之一不适用于递增哈希 table?
Why does one of this loop not work for incrementing a hash table?
所以我有两个循环。他们在哈希表上使用一个键。如果该键中没有任何内容,则存储 1。如果有内容,则存储加 1。
for(int i=0; i<nums1.length; i++) {
Integer count = nums_hash.get(i);
if (count == null) {
nums_hash.put(nums1[i], 1);
}
else {
nums_hash.put(nums1[i], count+1);
}
}
第一个不起作用,但下面的工作得很好:
for(int i = 0; i < nums1.length; i++)
{
if(nums_hash.containsKey(nums1[i])) {
nums_hash.put(nums1[i],nums_hash.get(nums1[i])+1);
}
else nums_hash.put(nums1[i], 1);
}
我想了解一下这个的解释。
你的第二行代码应该是
Integer count = nums_hash.get(nums1[i]);
您没有在整个代码中使用同一个密钥。避免这种情况的一个好方法是不要像您那样重复评估它。例如
Integer key = nums1[i];
为了避免不正确的代码重复,编写此代码的一种更简洁的方法是使用 for-each 循环和 Map.compute
for(Integer i : nums1)
nums_hash.compute(i, (k, v) -> v == null ? 1 : v + 1);
注意:对于线程安全的映射,使用计算是线程安全的。
第一个不起作用,因为您没有将 nums[i] 的值传递给 get 方法,而是传递了 i 的值。将第一个代码的第二行改为
Integer count = nums_hash.get(nums[i]);
所以我有两个循环。他们在哈希表上使用一个键。如果该键中没有任何内容,则存储 1。如果有内容,则存储加 1。
for(int i=0; i<nums1.length; i++) {
Integer count = nums_hash.get(i);
if (count == null) {
nums_hash.put(nums1[i], 1);
}
else {
nums_hash.put(nums1[i], count+1);
}
}
第一个不起作用,但下面的工作得很好:
for(int i = 0; i < nums1.length; i++)
{
if(nums_hash.containsKey(nums1[i])) {
nums_hash.put(nums1[i],nums_hash.get(nums1[i])+1);
}
else nums_hash.put(nums1[i], 1);
}
我想了解一下这个的解释。
你的第二行代码应该是
Integer count = nums_hash.get(nums1[i]);
您没有在整个代码中使用同一个密钥。避免这种情况的一个好方法是不要像您那样重复评估它。例如
Integer key = nums1[i];
为了避免不正确的代码重复,编写此代码的一种更简洁的方法是使用 for-each 循环和 Map.compute
for(Integer i : nums1)
nums_hash.compute(i, (k, v) -> v == null ? 1 : v + 1);
注意:对于线程安全的映射,使用计算是线程安全的。
第一个不起作用,因为您没有将 nums[i] 的值传递给 get 方法,而是传递了 i 的值。将第一个代码的第二行改为
Integer count = nums_hash.get(nums[i]);