Map<String, String> phoneBook=people.stream()
.collect(toMap(Person::getName, Person::getAddress));
Run Code Online (Sandbox Code Playgroud)
重复发生时,我得到重复的密钥异常.
是否可以忽略在重复发生时将值添加到映射?
当存在重复时,它应该继续忽略该重复键.
根据Java Concurrency in Practice,第11.4.3章说:
锁分裂有时可以扩展到一组变量独立对象的分区锁定,在这种情况下,它被称为锁定条带.例如,ConcurrentHashMap的实现使用一个包含16个锁的数组,每个锁保护1/16的散列桶; 铲斗N由锁定N mod 16保护.
我仍然有理解和可视化锁条纹和铲斗机制的问题.有人可以用很好理解的话来解释这个:)
提前致谢.
我对HashMap有疑问,因为我们都知道HashMap允许一个空键和值对,我的问题是
如果我这样写,
m.put(null,null);
m.put(null,a);
Run Code Online (Sandbox Code Playgroud)
它会抛出(错误或异常)还是会覆盖该值或者什么是returing的值?
我想做以下功能:
if (!map.contains(key)) {
map.put(key, val);
}
Run Code Online (Sandbox Code Playgroud)
更新:让我们假设不是HashMap这样的地图被实现为某种树.
但请注意,它有点低效,因为如果我们进入实际上我们实际搜索地图两次.我其实喜欢这样做:
map.put_if_new_key(key, val);
Run Code Online (Sandbox Code Playgroud)
知道怎么用Java做到这一点?
我在某处读过HashMap使用链接来解决冲突.但如果是这样的话.如何访问具有相同键值的所有元素.
例如 :
HashMap<Integer, String> hmap = new HashMap<Integer, String>();
hmap.put(1, "1st value");
hmap.put(1, "2nd value");
hmap.put(1, "3rd value");
hmap.put(1, "4th value");
Run Code Online (Sandbox Code Playgroud)
现在,如果我做hmap.get(1)它返回"第四个值"
如果确实它确实像链接一样
键值1"第四值"--->"第三值"--->"第二值"---->"第一值"
我怎样才能获得其他值?
hmap.get(1) 只返回第一个值.
我的第二个问题是,
如果它做线性链接.如何删除键的任何一个值.假设我想从我的hashmap中删除"4th value"并希望保留相同键的所有其他值,我该怎么办?
如果我做
hmap.remove(1);
,它删除了完整的链.
我试图了解Map接口如何在Java中工作.我要做的是:遍历字符串数组,并为数组中的每个名称name[]放置grade0到5之间的随机.然后映射grade到name[i].然而,地图大小变得奇怪,虽然我在数组中有10个元素,map.size()映射后是5.为什么程序会多次计算相同的大小(参见输出)?以下是代码和输出:
import java.util.*;
class MapInterfaceExample{
public static void main(String[] args){
int grade = 0;
String[] name = {"Lisa", "Dan", "John", "Adam", "George", "Amanda", "Sarah", "James", "Derek", "Sam"};
Map<Integer,String> map=new HashMap<Integer,String>();
for(int i=0; i<name.length; i++){
grade = (int)(Math.random()*5+1);
map.put(grade, name[i]);
//System.out.println(grade + "\t"+ name[i]);
System.out.println("Size of map "+ map.size());}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
地图大小1
地图大小2
地图大小2
地图大小2
地图大小2
地图大小3
地图大小3
地图大小4
地图大小4
地图大小5
Map<String, String> map = new HashMap<String, String>();
map.put("1", "xyz");
map.put("1", "abc");
map.put("1", "cde");
map.put("2", "err");`
Run Code Online (Sandbox Code Playgroud)
`
对于上面的地图,我想获得与密钥相关的所有值1.预期输出.
Key :: 1值是:: xyz,abc,cde
值的顺序并不重要.