相关疑难解决方法(0)

使用流生成地图时忽略重复项

Map<String, String> phoneBook=people.stream()
                                    .collect(toMap(Person::getName, Person::getAddress));
Run Code Online (Sandbox Code Playgroud)

重复发生时,我得到重复的密钥异常.

是否可以忽略在重复发生时将值添加到映射?

当存在重复时,它应该继续忽略该重复键.

java java-8 java-stream

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

需要简单解释"锁定条带化"如何与ConcurrentHashMap一起使用

根据Java Concurrency in Practice,第11.4.3章说:

锁分裂有时可以扩展到一组变量独立对象的分区锁定,在这种情况下,它被称为锁定条带.例如,ConcurrentHashMap的实现使用一个包含16个锁的数组,每个锁保护1/16的散列桶; 铲斗N由锁定N mod 16保护.

我仍然有理解和可视化锁条纹和铲斗机制的问题.有人可以用很好理解的话来解释这个:)

提前致谢.

java concurrency concurrenthashmap java.util.concurrent

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

HashMap允许重复?

我对HashMap有疑问,因为我们都知道HashMap允许一个空键和值对,我的问题是

如果我这样写,

m.put(null,null);
m.put(null,a);
Run Code Online (Sandbox Code Playgroud)

它会抛出(错误或异常)还是会覆盖该值或者什么是returing的值?

java hashmap

19
推荐指数
4
解决办法
10万
查看次数

在java*中将值放入映射中,而不存在*更新现有值(如果存在)

我想做以下功能:

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做到这一点?

java collections dictionary

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

java HashMap如何链接?如何访问所有碰撞值?

我在某处读过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);

,它删除了完整的链.

java collections data-structures

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

在java中映射 - 获取错误的地图大小

我试图了解Map接口如何在Java中工作.我要做的是:遍历字符串数组,并为数组中的每个名称name[]放置grade0到5之间的随机.然后映射gradename[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

java

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

如何在java中打印HashMap中键的所有值

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

值的顺序并不重要.

java hashmap

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