我觉得这是一个非常简单的问题,但我找不到答案。
您可以将数组对象输入到HashMap的put方法吗?
示例:
假设你有一个HashMap:
HashMap<Integer, String> map = new HashMap <Integer, String>();
你有一个整数数组和一个方便的字符串数组。数组未按如下所示进行初始化,但包含未知值(这更容易说明结果)。
int[] keys = {1, 3, 5, 7, 9};
String[] values = {"turtles", "are", "better", "than", "llamas"};
我希望HashMap的键值对为:
1, turtles
3, are
5, better
7, than
9, llamas
这可以用map.put(keys, values)
这样的方法来实现吗?我知道这不起作用,你应该得到一个错误,如“ HashMap类型中的方法put(Integer,String)不适用于参数(int [],String [])” 。我只想要比以下更有效,更优雅或更紧凑的东西:
for (int i=0; i < keys.length; i++) {
map.put(keys[i],values[i]);
}
答案 0 :(得分:5)
我无法想象
for (int i=0; i < keys.length; i++) {
map.put(keys[i],values[i]);
}
可以提高效率。如果这是你经常要做的事情那么我可能会围绕Map
写一个帮助对象。
请注意,如果要添加的值在地图中已经,则Map.putAll()存在。
答案 1 :(得分:2)
在我看来,你已经发现了解决这个问题的非常直接的方法。
HashMap<Integer, String> map = new HashMap <Integer, String>();
int[] keys = {1, 3, 5, 7, 9};
String[] values = {"turtles", "are", "better", "than", "llamas"};
for(int i = 0; i < keys.length; i++){
map.put(keys[i], values[i]);
}
答案 2 :(得分:0)
如果您需要此行为,则需要解析每个元素以将它们放入HashMap。最坏的情况复杂性将是 O(n),你不能减少它。您需要触摸所有元素以填充HashMap
下面的代码(如你所述)是唯一的解决方法
for (int i=0; i < keys.length; i++) {
map.put(keys[i],values[i]);
}
答案 3 :(得分:0)
没有其他方法可以直接将数组放入Map中。您需要遍历数组的每个元素并将一个键值对插入Map。
答案 4 :(得分:0)
除了好的for
之外,您还可以随时实施自己的解决方案。对于一个非常详细的方法:
public class MapFromArrayBuilder {
private MapFromArrayBuilder() {}
public static <K, V> Binder<K, V> map(K[] keys, V[] values) {
return new Binder(keys, values);
}
public static class Binder<K, V> {
private final V[] values;
private final K[] keys;
public Binder(K[] keys, V[] values) { this.keys = keys; this.values = values; }
public void into(Map<K, V> map) {
for (int i = 0; i < keys.length; i++) {
map.put(keys[i], values[i]);
}
}
}
用它你可以做类似
的事情 public static void main(String[] args) {
Map<Integer, String> leMap = new LinkedHashMap<Integer, String>();
map(new Integer[] {0}, new String[] {"teste"}).into(leMap);
for (Integer key : leMap.keySet()) {
System.out.format("%d = %s\n", key, leMap.get(key));
}
}
但它只是为了提高可读性而创建对象:P不是最具性能的解决方案,但读它很酷:)
无论如何,更喜欢好老for
。我喜欢创建这种类型的构造只是为了好玩,它不打算在生产代码中使用,因为它只是为了避免一些命令性的代码而进行大量循环:)