我想问
在 HashMap 中
如果元素 ID 相同,如何计算所有数字?
谁能给我一些想法?
或者只是提供一些有用的引用链接供我研究
谢谢
import java.util.*;
import java.util.Iterator;
public class hash {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("ABS", new Double(3434.34));
hashMap.put("ABD", new Double(123.22));
hashMap.put("ABD", new Double(123.22));
hashMap.put("ABD", new Double(123.22));
hashMap.put("ABD", new Double(123.22));
Set set = hashMap.entrySet();
Iterator i = set.iterator();
while (i.hasNext()) {
Map.Entry me = (Map.Entry) i.next();
System.out.println(me.getKey() + " : " + me.getValue());
}
}
}
最佳答案
你不能。您需要一个支持计数键的数据结构。 map 实现没有。
Guava
示例代码:
final Multimap<String, Double> map =
Multimaps.newListMultimap(
Maps.<String, Collection<Double>>newTreeMap(),
new Supplier<List<Double>>(){
@Override
public List<Double> get() {
return Lists.newArrayList();
}});
map.put("ABS", Double.valueOf(3434.34));
map.put("ABD", Double.valueOf(123.22));
map.put("ABD", Double.valueOf(123.22));
map.put("ABD", Double.valueOf(123.22));
map.put("ABD", Double.valueOf(123.22));
for (final Multiset.Entry<String> key : map.keys().entrySet()) {
System.out.println(
"Key: "
+key.getElement()
+", count: "
+key.getCount()
+", values: "
+map.get(key.getElement())
);
}
输出:
Key: ABD, count: 4, values: [123.22, 123.22, 123.22, 123.22]
Key: ABS, count: 1, values: [3434.34]
Apache Commons/Collections 中的 MultiMap 也可以解决这个问题。
纯Java
如果不允许使用外部库,您仍然可以使用 Map<String, List<Double>>
实现此功能.创建一个这样的方法
辅助方法
public static <K, V> void assignValue(
final Map<K, Collection<V>> map, final K key, final V value) {
Collection<V> values = map.get(key);
if(values==null){
values=new ArrayList<V>();
map.put(key, values);
}
values.add(value);
}
用法
然后像这样使用它:
final Map<String, Collection<Double>> map =
new HashMap<String, Collection<Double>>();
assignValue(map, "ABS", Double.valueOf(3434.34));
assignValue(map, "ABD", Double.valueOf(123.22));
assignValue(map, "ABD", Double.valueOf(123.22));
assignValue(map, "ABD", Double.valueOf(123.22));
assignValue(map, "ABD", Double.valueOf(123.22));
for(final Entry<String, Collection<Double>> entry : map.entrySet()){
System.out.println(new StringBuilder()
.append("Key: ")
.append(entry.getKey())
.append(", count: ")
.append(entry.getValue().size())
.append(", values: ")
.append(entry.getValue())
.toString());
}
输出
Key: ABD, count: 4, values: [123.22, 123.22, 123.22, 123.22]
Key: ABS, count: 1, values: [3434.34]
关于Java HashMap 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4871346/