Java 如何向地图内的集合添加值?
我有这张地图Java 如何向地图内的集合添加值?,java,dictionary,hashmap,set,key,Java,Dictionary,Hashmap,Set,Key,我有这张地图map我的地图,现在我需要与它交互,我该怎么做 例如: 键是:“苹果”、“橘子”、“葡萄”等 每组将包含随机数:1-9 我需要创建一个映射(HashMap或TreeMap),其中包含键的字符串和值的集合。给我一把钥匙,我需要把电视机还回去。我还需要能够填写一个键为基础的多个数字的每个集。不知道如何处理这个问题。有什么想法吗?地图; Map<String,Set<Integer>> map; Set<Integer> set = map.get
map我的地图代码>,现在我需要与它交互,我该怎么做
例如:
键是:“苹果”、“橘子”、“葡萄”等
每组将包含随机数:1-9
我需要创建一个映射(HashMap或TreeMap),其中包含键的字符串和值的集合。给我一把钥匙,我需要把电视机还回去。我还需要能够填写一个键为基础的多个数字的每个集。不知道如何处理这个问题。有什么想法吗?地图;
Map<String,Set<Integer>> map;
Set<Integer> set = map.get("apple");
Set=map.get(“苹果”);
我省略了map
的实际填充,因为OP是如何获取集,即值map mapOfSets=new HashMap();
Map<String, Set<Integer>> mapOfSets = new HashMap<String, Set<Integer>>();
Set<Integer> numberSet = new HashSet<Integer>();
//put a set into the map
mapOfSets.put("key", numberSet);
//get a set out of the map
Set<Integer> set = mapOfSets.get("key");
Set numberSet=newhashset();
//在地图上画一组
设置的地图(“键”,数字集);
//从地图上划出一组
Set=mapOfSets.get(“key”);
如果我理解正确,这并不难
Map<String, Set<Integer>> reqdMap = new HashMap<String, Set<Integer>>();
//Form the set corresponding to apple.
Set<Integer> appleSet = new HashSet<Integer>();
appleSet.add(1);
...
reqdMap.put("apple", appleSet);
//To Retrieve
appleSet = reqdMap.get("apple");
Map reqdMap=newhashmap();
//形成与苹果对应的集合。
Set appleSet=new HashSet();
添加(1);
...
需求地图放置(“苹果”,苹果集);
//取回
appleSet=reqdMap.get(“苹果”);
如果要使用一种方法向一个集合中添加多个数字,请尝试以下操作:
Map<String, Set<Integer>> map; // Definition
public void addValues(String key, Integer... values) {
map.get(key).addAll(values);
}
一行而不是5行。为什么不看看这个:
MultiMap
允许您以非常高效的方式存储给定键的多个值
在您的情况下,最大的优点是您不必为了向给定键添加一些值而从给定键检索值(Set
)
实际上,您只需将值添加到键中,就像处理“monovalue”一样,它将自动添加到后台的集合中。这只是一个完整类的示例。只需运行它并对其进行操作,以了解更多有关此问题的信息
public class Tester5 {
/**
* @param args
*/
public static void main(String[] args) {
//"apple", "orange", "grape", etc. Each set will contain random numbers: 1, 2, 3, 4, 5, 6, 7, 8, 9
Random ran = new Random();
Map<String, Set<Integer>> map= new HashMap<String, Set<Integer>>();
String keys[]= {"apple", "orange", "grape"};
for(String key : keys) {
Set<Integer> integers= new HashSet<Integer>();
for(int i = 0; i < 10; i++) {
integers.add(ran.nextInt(9)+1);
}
map.put(key, integers);
}
System.out.println(map.toString());
}
}
公共类测试员5{
/**
*@param args
*/
公共静态void main(字符串[]args){
//“苹果”、“橘子”、“葡萄”等。每组将包含随机数:1、2、3、4、5、6、7、8、9
Random ran=新的Random();
Map Map=newhashmap();
字符串键[]={“苹果”、“橙色”、“葡萄”};
用于(字符串键:键){
Set integers=new HashSet();
对于(int i=0;i<10;i++){
整数.add(ran.nextInt(9)+1);
}
map.put(键,整数);
}
System.out.println(map.toString());
}
}
需要记住的是,该值最初为空,因此首次使用密钥时,必须对其进行初始化:
Map<String,Set<Integer>> map;
因为对get()
有一种方法可以使映射非常方便地使用,方法是在映射内部内化空检查,这样对get()
的调用将始终返回非空集;创建相应重写get()
的匿名类:
Map<String,Set<Integer>> map = new HashMap<String,Set<Integer>> () {
@Override
public Set<Integer> get(Object key) {
Set<Integer> set = super.get(key);
if (set == null) {
set = new HashSet<Integer>();
put(key, set);
}
return set;
}
}
检查:
if (map.get(key).contains(number)) // now safe
空检查代码不再是必需的
--
Java 8更新:
要在添加到集合时处理空条目问题,请执行以下操作:
map.computeIfAbsent( key, k -> new HashSet<>() ).add(number);
阅读有关Set
接口及其实现的文档。这同样适用于Map
。您能给出一个用户输入和预期输出的示例吗?您的地图应该是地图
,至于地图或集合本身,请参阅文档。特别是map的put
和get
方法以及set的add
方法。您可能希望从Guava开源库中查看接口及其实现。您可能可以直接使用这个库,或者至少看一下他们的代码,以了解如何使用这种类型的数据结构;
Map<String,Set<Integer>> map = new HashMap<String,Set<Integer>> () {
@Override
public Set<Integer> get(Object key) {
Set<Integer> set = super.get(key);
if (set == null) {
set = new HashSet<Integer>();
put(key, set);
}
return set;
}
}
map.get(key).add(number);
if (map.get(key).contains(number)) // now safe
map.computeIfAbsent( key, k -> new HashSet<>() ).add(number);
if ( map.getOrDefault(key, Collections.emptySet() ).contains(number))