2012-01-28 9 views
1

私はマップに入れたいintの配列を持っています。配列の各値は配列の別の値で置き換えなければならないので、配列が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

あなただけなので何も[0,1]&[0,2]最後に、それはあなたが何を達成することは何ですかマップ –

+0

に残っていないだろう、独自のキーを持っていることができます。 –

+0

私は2次元配列int [] []を生成したいと考えています。この配列は、提供された配列に拡大/縮小され、相互に結合された配列の値を含みます。それから私はそれを表示したい。 – aretai

答えて

2

ここで質問に答えるのは初めてです。脳のトレーニングよりも優れています。私はあなたの問題からいくつかの意味を推測しようとしました、あなたがチームのリストを持っているように聞こえ、什器のリストを生成したいと思った。 intの代わりにStringを使用していますが、これを行うコードは少しありますが、あなたは要点を得るべきです...

結果はすべてのフィクスチャが "フィクスチャ"リストに保存されています。ライン上の文の地図のための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

A Javaの地図は、キーごとに値をサポートしています。したがって、あなたが[0,2]を入れた後に[0,7]に入れると、最初のキーと値のペアが置き換えられます。あなただけ7Sを参照してください理由は、あなたが入れた最後の値です。

各キーに複数の値をサポートするmultimapののサードパーティの実装があります。

また、別のデータ構造を使用することもできます。たとえば、すべての値が整数である場合は、Map<Integer, BitSet>を使用してビットセットにビットを追加できます。最初にヌルビットセットをテストしてください。

2

それは印刷のためだけであれば、Mapの必要はありません。ループ内で組み合わせを印刷するだけで済みます。

あなたがそれらを保存したいんや、マルチマップを使用するためにサードパーティのLIBSに依存し、独自のコンテナオブジェクト(それらの2つのintのための容器を)書いて考えるとちょうどListの代わりMapでそれらを置くことができない場合。コンテナオブジェクトを適切なtoStringの実装と組み合わせると、印刷も簡単になります

+0

はい、そうしようとしています – aretai

関連する問題