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