Java哈希映射问题

Java哈希映射问题,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",

我想问一下

在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());
        }


    }
}

你不能。您需要一个支持计数键的数据结构。地图实现不会

番石榴 你可以用的一件事是

示例代码:

输出:

键:ABD,计数:4,值:[123.22,123.22,123.22,123.22,123.22] 键:ABS,计数:1,值:[3434.34]

apachecommons/Collections中的MultiMap也可以做到这一点

普通Java 如果不允许使用外部库,您仍然可以使用映射实现此功能。创建这样一个方法

辅助方法

用法

然后像这样使用它:

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());
}
输出

键:ABD,计数:4,值:[123.22,123.22,123.22,123.22,123.22] 键:ABS,计数:1,值:[3434.34]


你不能。您需要一个支持计数键的数据结构。地图实现不会

番石榴 你可以用的一件事是

示例代码:

输出:

键:ABD,计数:4,值:[123.22,123.22,123.22,123.22,123.22] 键:ABS,计数:1,值:[3434.34]

apachecommons/Collections中的MultiMap也可以做到这一点

普通Java 如果不允许使用外部库,您仍然可以使用映射实现此功能。创建这样一个方法

辅助方法

用法

然后像这样使用它:

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());
}
输出

键:ABD,计数:4,值:[123.22,123.22,123.22,123.22,123.22] 键:ABS,计数:1,值:[3434.34]


HashMap是一个不能包含重复键的映射。如果允许重复键,那么在调用map.getduplicateKey?时您希望返回哪个值?

HashMap是一个不能包含重复键的映射。如果允许重复键,调用map.getduplicateKey时您希望返回哪个值?

因此您需要使用Double+Count作为值,然后使用它而不是Double,作为练习,让它扩展java.lang.Number:

Class DoubleCount{
  final double value;
  private int count;
  DoubleCount(double value){
    this.value = value;
  }
  public int getCount(){
    return count;
  } 

  public double getValue(){
   return value;
  }

  public int incCount(){
    return ++count;
  } 
}

因此,您需要使用Double+Count作为值,然后使用它而不是Double,作为练习,让它扩展java.lang.Number:

Class DoubleCount{
  final double value;
  private int count;
  DoubleCount(double value){
    this.value = value;
  }
  public int getCount(){
    return count;
  } 

  public double getValue(){
   return value;
  }

  public int incCount(){
    return ++count;
  } 
}
size=hashMap.size; 然后使用for循环迭代

size=hashMap.size; 然后使用for循环进行迭代

进行通读,尤其是“put”方法,该方法表示:

将指定的值与此映射中的指定键相关联。如果映射以前包含此键的映射,则替换旧值

您构建代码的方式意味着HashMap将只包含两个键/值对

public class hash {

public static void main(String[] args) {

    HashMap hashMap = new HashMap();
    hashMap.put("ABS", new Double(3434.34)); // "ABS" key created. 1 object in map.
    hashMap.put("ABD", new Double(123.22)); // "ABD" key created. 2 objects in map.
    hashMap.put("ABD", new Double(123.22)); // "ABD" reference will point to new value.
    hashMap.put("ABD", new Double(123.22)); // .. and again
    hashMap.put("ABD", new Double(123.22)); // .. and again
因此,虽然您已经编写了五行put,但是HashMap中只会放置两个对象

你可以用

hashMap.size()
返回“hashMap”中有多少个键/值对的int值。

具有通读功能,尤其是“put”方法,该方法表示:

将指定的值与此映射中的指定键相关联。如果映射以前包含此键的映射,则替换旧值

您构建代码的方式意味着HashMap将只包含两个键/值对

public class hash {

public static void main(String[] args) {

    HashMap hashMap = new HashMap();
    hashMap.put("ABS", new Double(3434.34)); // "ABS" key created. 1 object in map.
    hashMap.put("ABD", new Double(123.22)); // "ABD" key created. 2 objects in map.
    hashMap.put("ABD", new Double(123.22)); // "ABD" reference will point to new value.
    hashMap.put("ABD", new Double(123.22)); // .. and again
    hashMap.put("ABD", new Double(123.22)); // .. and again
因此,虽然您已经编写了五行put,但是HashMap中只会放置两个对象

你可以用

hashMap.size()

要返回“hashMap”中有多少个键/值对的int值。

这不正确,他正在重新分配同一个键,并想计算重新分配的次数。这不正确,他正在重新分配同一个键,并想计算可能重复的