【问题标题】:putting values from array into map将数组中的值放入地图
【发布时间】:2023-03-14 18:36:01
【问题描述】:

我有一个要放入地图的整数数组。数组中的每个值都必须与数组的另一个值放在一起,这样如果我有一个 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));
        }       
    }
}

【问题讨论】:

  • 对于 Map 你只能有唯一的键,所以没有 [0,1] & [0,2] last 会留在地图中
  • 你要达到什么目标;
  • 我想生成一个二维数组 int[][],它将缩放到提供的数组,并且包含相互组合的底层数组的值。然后我想显示它。
  • 错了,不能那样做。我想将底层数组的元素相互组合,然后显示它。找到实现这一目标的方法。

标签: java arrays map hashmap


【解决方案1】:

我刚开始在这里回答问题 - 不过这比大脑训练要好。我试图从您的问题中推断出一些含义,并决定听起来您有一个团队列表并想要生成一个固定装置列表。这里有一些代码来完成这项工作,虽然使用 String 而不是 int,但你应该明白要点......

结果是所有的fixtures都存储在“fixtures”列表中,并由第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】:

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

    如果您确实想存储它们并且不能依赖第三方库来使用多映射,请考虑编写您自己的容器对象(那些 2 ints 的容器)并将它们放在 ListMap。将容器对象与一个不错的 toString 实现结合起来,打印也很容易

    【讨论】:

      【解决方案3】:

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

      MultiMap 有第三方实现,支持每个键的多个值。

      或者,您可以使用不同的数据结构。例如,如果所有值都是整数,您可以使用 Map&lt;Integer, BitSet&gt; 并将位添加到 Bitset。确保第一次测试空位集。

      【讨论】:

        猜你喜欢
        • 2022-01-09
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 2011-02-20
        • 2022-07-06
        • 2017-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多