把遍历一个map集合中的值累计存入另一个map中,一个key对应多个值,不是只有一个...求大神指点。
你可以定义一个list集合,存放多个值,然后将key对应的value值是list的集合对象,既满足map的哈希表结构,也保证了key对应多个值的这个需求
叙述问题让外行听懂也是一项重要技能。
Java Map是一个哈希表结构的数据结构,每个key对应一个hash值,然后根据这个hash值去找对应的value。
所以一个key不能对应多个value,但是多个key可以对应一个value。
通俗的讲:一个函数只能对应一个值,但是一个值可以对应多个函数。
每个key对应一个hash值,然后根据hash值去找对应的value; 可以理解成一个函数对应一个值,一个值可以对应多个函数.
key 值对应一个 value 值 key不能重复 但是value可以重复,,,
package com.koolsee.xulonghui.test;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Test t = new Test();
Map<Integer, User> map = new HashMap<Integer, User>();
map.put(1, t.new User(1, "zhansan", 1));
map.put(2, t.new User(2, "zhansan", 1));
map.put(3, t.new User(3, "lisi", 1));
map.put(4, t.new User(4, "lisi", 1));
map.put(5, t.new User(5, "wangwu", 1));
map.put(6, t.new User(6, "zhaoliu", 1));
System.out.println(getNameCount(map));
}
private static Map<String, Integer> getNameCount(Map<Integer, User> map) {
Map<String, Integer> resultMap = null;
if ((map != null) && !map.isEmpty()) {
resultMap = new HashMap<String, Integer>();
for (Integer key : map.keySet()) {
User user = map.get(key);
Integer count = resultMap.get(user.getName());
if (count != null) {
resultMap.put(user.getName(), count + 1);
} else {
resultMap.put(user.getName(), 1);
}
}
}
return resultMap;
}
public class User {
private Integer id;
private String name;
private Integer sex;
public User(Integer id, String name, Integer sex) {
super();
this.id = id;
this.name = name;
this.sex = sex;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return this.sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
}
}
package com.koolsee.xulonghui.test;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Test t = new Test();
Map<Integer, User> map = new HashMap<Integer, User>();
map.put(1, t.new User(1, "zhansan", 1));
map.put(2, t.new User(2, "zhansan", 1));
map.put(3, t.new User(3, "lisi", 1));
map.put(4, t.new User(4, "lisi", 1));
map.put(5, t.new User(5, "wangwu", 1));
map.put(6, t.new User(6, "zhaoliu", 1));
System.out.println(getNameCount(map));
}
private static Map<String, Integer> getNameCount(Map<Integer, User> map) {
Map<String, Integer> resultMap = null;
if ((map != null) && !map.isEmpty()) {
resultMap = new HashMap<String, Integer>();
for (Integer key : map.keySet()) {
User user = map.get(key);
Integer count = resultMap.get(user.getName());
if (count != null) {
resultMap.put(user.getName(), count + 1);
} else {
resultMap.put(user.getName(), 1);
}
}
}
return resultMap;
}
public class User {
private Integer id;
private String name;
private Integer sex;
public User(Integer id, String name, Integer sex) {
super();
this.id = id;
this.name = name;
this.sex = sex;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return this.sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
}
}
一个钥匙只能开一把锁 但是一把锁能有多个钥匙 钥匙就是key(键) 锁就是value(值)
每个key值只能对应一个hash值,只能对应一个value值,所以一个key对应多个value值得情况并不存在,可是一个value值可以对应多个key值
map中key是唯一的,如果前面有一个key,后面有相同的key值填入,那么后面这个 key对应的value会把,前面相同key的value 替换掉
多个值放个list好咯,然后Map
Map testMap = new HashedMap();
List testList = new ArrayList<>();
testList.add("value1");
testList.add("value2");
testList.add("value3");
testMap.put("key1", testList);
把多个value值放到list集合里面就行了,或者多个value值组成一个字符串
如 : Strign value = value1+","+value2+","+value3;
你描述的不是很清楚,下次提问先把问题讲清楚或者直接截图贴上
testMap.put(key,Object);
看到没有,value其实是一个Object类型的,也就是说可以存储任意对象,比如 bean、集合、数组、字符串......
真的,这是你5次问相同的问题了,这个知识点有这么难吗。。你去学一下啊