将数组中的值放入映射中

时间:2012-01-28 16:33:29

标签: java arrays map hashmap

我有一组我要放入地图的整数。数组中的每个值都必须与数组的另一个值一起放置,这样如果我有一个0,2,4,7的数组,那么应该有每个组合(例如[0,2],[0,4],[0 ,[7],也[2,0],[4,0]和[7,0],其余值相同)。我正试图通过Map实现它,然后我尝试显示它。但是我有一些问题。我应该如何解决这个问题,还是有更好的方法来实现这一目标?

import java.util.*;
import java.util.Map;

public class Prac1 {
    public Map<Integer, Integer> count(int[] A){
        int k = A.length;       
        Map<Integer,Integer> m = new HashMap<Integer,Integer>();

        for (int i = 0; i < A.length; i++){
            for (int j = 0; j < A.length; j++){
                m.put(i, j);
            }
        }       
        return m;
    }
    public static void main(String[] args){
        int[] A = {0, 2, 4, 7};
        Map<Integer,Integer> m = new HashMap<Integer,Integer>();

        for (int i = 0; i < A.length; i++){
            for (int j = 0; j < A.length; j++){
                m.put(A[i], A[j]);
            }
        }           

        for (int i = 0; i < m.size(); i++){
            System.out.println(m.get(i));
        }       
    }
}

3 个答案:

答案 0 :(得分:2)

Java Map仅支持每个键的一个值。因此,当你输入[0,2],然后输入[0,7]时,第一个键值对被替换。这就是为什么你只看到7s,你输入的最后一个值。

MultiMaps有第三方实现,支持每个密钥的多个值。

或者,您可以使用不同的数据结构。例如,如果所有值都是整数,则可以使用Map<Integer, BitSet>并向Bitset添加位。请务必在第一次测试null Bitset。

答案 1 :(得分:2)

如果仅用于打印,则不需要Map。您只需在循环中打印组合即可。

如果您确实想要存储它们并且不能依赖第三方库来使用多地图,请考虑编写您自己的容器对象(这两个int的容器)并将它们放在{{{ 1}}而不是List。将容器对象与合适的Map实现相结合,打印也很简单

答案 2 :(得分:2)

我在这里回答问题的新手 - 虽然它比大脑训练更好。我试图从你的问题中推断出一些意义,并认为这听起来像你有一个团队列表,并希望生成一个灯具列表。这里有一些代码来完成这项工作,虽然使用String而不是int,但你应该得到要点...

结果是所有灯具都存储在“灯具”列表中,所有灯具都在第39行的声明中打印出来。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class FixtureGen 
{
    class Fixture
    {
        public Fixture(String teamA, String teamB)
        {
            this.teamA = teamA;
            this.teamB = teamB;
        }

        String teamA;
        String teamB;

        public String toString()
        {
            return teamA +" vs. "+teamB;
        }
    }

    public static void main(String args[])
    {
        FixtureGen gen = new FixtureGen();

        String[] teams = {"Spurs","Chelsea","Arsenal","Fulham","QPR","Palace"}; 
        List<String> teamList = Arrays.asList(teams);
        List<Fixture> fixtures = new ArrayList<Fixture>();

        for (String team : teamList)
        {
            fixtures.addAll(gen.getHomeFixtures(team, teamList));
        }

        for (Fixture fixture : fixtures)
        {
            System.out.println(fixture.toString());
        }
    }

    private  List<Fixture> getHomeFixtures(String team, List<String> teamList)
    {
        List<Fixture> fixtures = new ArrayList<Fixture>();
        Fixture fixture = null;
        for (String aTeam : teamList)
        {
            if (team != null && !team.equals(aTeam))
            {
                fixture = new FixtureGen.Fixture(team, aTeam);
                fixtures.add(fixture);
            }
        }
        return fixtures;
    }   
}