2012-01-28 59 views
1

我有一個我想要放入地圖的int數組。數組中的每個值必須與數組的另一個值一起放置,這樣如果我有一個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,1] [0,2]最後會留在地圖 – 2012-01-28 16:37:13

+0

它是什麼,你什麼來實現的; – 2012-01-28 16:41:34

+0

我想要生成一個2維數組int [] [],它將縮放到提供的數組,並且將包含相互組合的基礎數組的值。然後我想要顯示它。 – aretai 2012-01-28 16:56:37

回答

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; 
    } 
} 
2

一個Java地圖僅支持每個關鍵一個值。所以,當你輸入[0,2],然後輸入[0,7]時,第一個鍵值對被替換。這就是爲什麼你只看到7s,你輸入的最後一個值。

有第三方MultiMaps的實現,它支持每個鍵的多個值。

或者,您可以使用不同的數據結構。例如,如果所有值都是整數,則可以使用Map<Integer, BitSet>並將位添加到位集。第一次通過時務必測試一個空Bitset。

2

如果僅用於打印,則不需要Map。您可以在循環中打印組合。

如果你想保存它們,不能依賴於第三方庫使用多圖,可以考慮編寫自己的容器對象(容器對那些2個int S),只是把它們放在一個List代替Map的。將容器對象與一個體面的toString實現相結合,打印也將很容易

+0

是的,試圖做到這一點 – aretai 2012-01-28 21:05:54