положить значения из массива в карту - PullRequest
1 голос
/ 28 января 2012

У меня есть массив целых, которые я хочу поместить в карту. Каждое значение из массива должно быть помещено с другим значением массива, так что если у меня есть массив 0, 2, 4, 7, должна быть каждая комбинация (например, [0, 2], [0, 4], [0 , 7], но также [2, 0], [4, 0] и [7,0] и то же самое для остальных значений). Я пытаюсь добиться этого с помощью карты, а затем я пытаюсь отобразить его. Однако у меня есть некоторые проблемы с этим. Как мне это исправить или есть ли лучший способ добиться этого?

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 ]

2 голосов
/ 29 января 2012

Если это просто для печати, нет необходимости в Map. Вы можете просто напечатать комбинации в вашем цикле.

Если вы хотите сохранить их и не можете зависеть от сторонних библиотек в использовании мультикарты, подумайте над написанием своего собственного объекта-контейнера (контейнера для этих 2 int с) и просто поместите их в List вместо Map. Объедините контейнерный объект с приличной toString реализацией, и печать будет также легкой

2 голосов
/ 29 января 2012

Я новичок в ответе на вопросы здесь - это лучше, чем тренировка мозга.Я попытался определить смысл вашей проблемы и решил, что у вас есть список команд и вы хотите создать список матчей.Вот немного кода для выполнения работы, хотя с использованием 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;
    }   
}
2 голосов
/ 28 января 2012

Java-карта поддерживает только одно значение на ключ.Итак, когда вы вводите [0,2], а затем - [0,7], первая пара ключ-значение заменяется.Вот почему вы видите только 7, последнее введенное вами значение.

Существуют сторонние реализации MultiMaps, которые поддерживают несколько значений для каждого ключа.

Или вы можете использовать другоеструктура данных.Например, если все значения будут целыми числами, вы можете использовать Map<Integer, BitSet> и добавить биты в набор битов.Обязательно протестируйте нулевой битсет в первый раз.

...