Java HashMap 问题

标签 java hashmap

我想问

在 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

您可以使用的一件事是 GuavaMultimap

示例代码:

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/

相关文章:

java - 软删除的 JUnit 测试

java - Dagger2 注入(inject)生成的类

java - 如何将pyc(python编译文件)转换为java?

java - 重写 Spring 定义 : Spring Bean Annotation @Primary

gwt - 使用带有 HashMap 的 GWT 的 AutoBean 反序列化时出现 NullPointerException

python - HashMap 在Python字典中传递引用

Java HashMap 哈希函数

java AbstractTableModel 2 每行有不同的颜色

c++ - C++ 中映射的动态数组

java - 使用多个 if 语句进行 Junit 测试