2017-09-18 52 views
0
for(int i = 0; i < Board.NUM_OF_ROWS; i++) { 
     for(int j = 0; j < Board.NUM_OF_COLS; j++) { 
      if(piece.canMove(board, piece.getX(), piece.getY(), i, j)) { 
       mappedPosition.put(i, j); 
      } 
     } 
    } 

このコードでは、チェス "ピース"の可動の位置の(x、y)座標のペアを追加しようとしています。例えば、私は[2,2]、[2,4]、[3,1]、[3,5]、[5,1]、[5,5]、[ 6,2]、[6,4]Javaでのマップの使用。値を上書きしない方法

しかし、私がputを使うと、同じKeyを持つときにValueを上書きします。だから、[2,2]はちょうど[2,4]になります。

ペアを上書きせずに完全なリストを取得するにはどうすればよいですか?

+6

地図を使用していません。 POJOを作成するか、またはjava.awt.Pointを使用してx/y座標を格納します。そこにあるオブジェクトのリストを作成します。 – XtremeBaumer

+0

これはマップです。各キーを値(複数の値ではない)にリンクする方法です。ポジションのリストを保存したいだけの場合は、ある種のポジションクラスを使用し、インスタンスをリストに格納します。 – khelwood

+0

地図を使ってはできません。 – procrastinator

答えて

3

Mapは一意のキー識別子を使用するため、同じキーを2回以上持つことは不可能です。

必要な2つの座標値を持つクラスを作成します。

public class BoardPoint { 

    private int x; 
    private int y; 

    public BoardPoint(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    // getters & setters 
} 

上記のクラスは、縮尺を変更する必要がある場合に役立ちます。複数の変数を実装したり、値のペアに対していくつかの操作を実行したりする場合に便利です。 POJO(単純な古いJavaオブジェクト)だけが必要な場合は、クラスjava.awt.Pointは@XtremeBaumerがコメントに言ったように十分でなければなりません。

+1

equals()メソッドとhashcode()メソッドを実装することを忘れないでください。また、クラスを不変にすることもできます。クラスのインスタンスをマップのキーとして返します。 – mxf

0

マップはキー - >値です。そして、各キーは各瞬間に1つの値しか持てません。値が(x、y)のペアであるか、単なるリストである場合にsetを使用することができます。後でこの情報をどのように使用するかによって異なります。

0

Guavaのマルチマップを使用できます。

Multimap<Integer, String> multimap = ArrayListMultimap.create(); 
multimap.put(1, "rohit"); 
multimap.put(1, "jain"); 

System.out.println(multimap.get(1)); // Prints - [rohit, jain] 
0

あなたはキー

マルチマップMHM =新しいMultiValueMap()ごとに複数の値を保持するためのApache MultiMapを使用することができます。
mhm.put(key、 "A"); mhm.put(key、 "B");
mhm.put(key、 "C");
コレクションcoll =(コレクション)mhm.get(キー);

collは "A"、 "B"、 "C"を含むコレクションです。

関連する問題