java更新哈希映射

java更新哈希映射,java,hashmap,key,Java,Hashmap,Key,我在更改HashMap>中的值时遇到问题。首先,我这样做: HashMap<String, ArrayList<Integer>> countries = new HashMap<>(); ArrayList<Integer> medals = new ArrayList<>(); medals.add(0); medals.add(0); medals.add(0); for(int i = 0; i < COUNTRY.len

我在更改HashMap>中的值时遇到问题。首先,我这样做:

HashMap<String, ArrayList<Integer>> countries = new HashMap<>();
ArrayList<Integer> medals = new ArrayList<>();
medals.add(0); medals.add(0); medals.add(0);
for(int i = 0; i < COUNTRY.length; i++){
    countries.put(COUNTRY[i], medals);
}
Integer plus = new Integer(1);
for(int j = 0; j < athletes.size(); j++){
    if(j == 3)
        break;
    Athlete a = athletes.get(j);
    ArrayList<Integer> medals = countries.get(a.getCountry());
    Integer medal = medals.get(j) + plus;
    medals.set(j, medal);
    countries.put(a.getCountry(), medals);
}
我用静态数组中的键填充HashMap,并添加一个默认的ArrayList值,该值用0,0,0填充。然后我会这样做:

HashMap<String, ArrayList<Integer>> countries = new HashMap<>();
ArrayList<Integer> medals = new ArrayList<>();
medals.add(0); medals.add(0); medals.add(0);
for(int i = 0; i < COUNTRY.length; i++){
    countries.put(COUNTRY[i], medals);
}
Integer plus = new Integer(1);
for(int j = 0; j < athletes.size(); j++){
    if(j == 3)
        break;
    Athlete a = athletes.get(j);
    ArrayList<Integer> medals = countries.get(a.getCountry());
    Integer medal = medals.get(j) + plus;
    medals.set(j, medal);
    countries.put(a.getCountry(), medals);
}
我有一个由运动员组成的列表,已经根据运动员的成绩进行了排序。我想做的是把排名前三的运动员选出来,更新我的HashMap值,这样ArrayList就会有3个数字,代表每个国家获得的金牌、银牌和铜牌数量。 问题是,当我尝试用新的ArrayList替换旧值时,它会用新的ArrayList替换HashMap中的所有值,而不仅仅是带有匹配键的值


我不知道问题是什么,有什么建议吗???

问题出在这段代码中:

HashMap<String, ArrayList<Integer>> countries = new HashMap<>();
ArrayList<Integer> medals = new ArrayList<>();
medals.add(0); medals.add(0); medals.add(0);
for(int i = 0; i < COUNTRY.length; i++){
    countries.put(COUNTRY[i], medals);
}

问题出在这段代码中:

HashMap<String, ArrayList<Integer>> countries = new HashMap<>();
ArrayList<Integer> medals = new ArrayList<>();
medals.add(0); medals.add(0); medals.add(0);
for(int i = 0; i < COUNTRY.length; i++){
    countries.put(COUNTRY[i], medals);
}

你应该用谷歌番石榴。它正是为这种情况而设计的,在这种情况下,您需要地图类型的结构。i、 e.同一密钥的多个值

你应该使用谷歌番石榴。它正是为这种情况而设计的,在这种情况下,您需要地图类型的结构。i、 e.同一密钥的多个值

谢谢,我应该知道我犯了一个愚蠢的错误:是的,我想int[]更简单:我与这个问题斗争了这么久,这是一个简单的解决方法。非常感谢你!谢谢,我应该知道我犯了一个愚蠢的错误:是的,我想int[]更简单:我与这个问题斗争了这么久,这是一个简单的解决方法。非常感谢你!