2012-05-10 12 views
0

は、私は私の私のイテレータでnestedMapnestedMapは、このように、put()方法で作成されてアクセスすることができます。文字列キーとネストされたマップを管理する

@Override 
public String put(final String row, final String column, final String value) { 
    /** 
    * Second map which is contained by centralMap, that contain Strings as 
    * Keys and Values. 
    */ 
    Map<String, String> nestedMap; 

    if (centralMap.containsKey(row)) 
     nestedMap = centralMap.get(row); 
    else 
     nestedMap = new HashMap<String, String>(); 
    if (!nestedMap.containsKey(column)) 
     counter++; 
    centralMap.put(row, nestedMap); 
    return nestedMap.put(column, value); 
} 

をしてcentralMapは、オブジェクト変数として宣言され、

private final Map<String, Map<String, String>> centralMap; 

しかし、このように、単にコンストラクタでインスタンス化:

centralMap = new HashMap<String, Map<String, String>>(); 

私が実装しようとしているメソッドは、removeメソッドです:

@Override 
    public void remove() { 
     for (Map<String, String> map : centralMap.values()) { 
      map = centralMap.get(keyName); 
      iteratorNested.remove(); 
      if (map.size() <= 0) 
       iteratorCentral.remove(); 
     } 
    } 

どうもありがとう!

+0

関連[Map.Entry 2次元マップの反復子の再定義](http://stackoverflow.com/questions/10532779/map-entry-redefinition-for-iterator-of-2-dimensional-map) – amit

+0

それは本当に*ネストされたマップですか?それは私にとってもう一つのメソッドローカル変数のように見えます。 – adarshr

+1

***でアクセス*** iterator?あなたが何を意味しているかの例を示してください。 –

答えて

0

ないあなたが正確に求めているが、私はこれを読むために少し簡単だと思うのかわから:「でき

@Override 
public String put(final String row, final String column, final String value) { 
    /** 
    * Second map which is contained by centralMap, that contain Strings as 
    * Keys and Values. 
    */ 
    Map<String, String> nestedMap = centralMap.get(row); 
    if (nestedMap == null) { 
     nestedMap = new HashMap<String, String>(); 
     centralMap.put(row,nestedMap); 
    } 

    if (!nestedMap.containsKey(column)) 
     counter++; 
    centralMap.put(row, nestedMap); 
    return nestedMap.put(column, value); 
} 

は、私は非常にあなたが二スタンザでやっているのか理解することはできませんので、それを改善するのに役立ちます。あなたの質問に言及されているイテレータは表示されません。

私は推測していますが、あなたのプログラムでELSEWHEREを使用している可能性があります(より多くのコード、特定の関数プロトタイプや動作文を見てください) centralMapインスタンスの内容、およびネストされたインスタンスnestedMapのインスタンスです。はい、できます。

public void iterateOverAllNested() 
{ 
    for (Map.Entry<String,Map<String,String>> nested : centralMap) { 
    final String centralKey = nested.key(); 
    final Map<String,String> nestedMap = nested.value(); 
    System.out.println("Central map row/column: "+centralKey); 
    for (Map.Entry<String,String> entry : nestedMap) { 
     System.out.println(" key="+entry.key()+", value="+entry.value()); 
    } 
    } 
} 

注意してください。型なしStringのネストされたマップはおそらく間違っています。あなたは最近Perlを書いていることがありますか?私はあなたの特定の問題のための良いデータ構造について尋ねる2番目の質問を書くことをお勧めします。あなたはこのコードをあなたの出発地として含めることができ、人々はよりクリーンなソリューションを提供するでしょう。

+0

OPの以前の質問から:「私たちは、文字列の2D次元マップになるオブジェクトを作成する、クラスを実装するための宿題があります。」 –

+1

@マルコ:私は帽子を持って家に帰ると思う。 – andersoj

+0

これが実装しようとする方法イムです: @Override \t \tのための公共ボイドのremove(){ \t \t \t(地図<文字列、文字列>マップ:centralMap.values()){ \t \t \t \tマップ= centralMap.get(keyName); \t \t \t \t iteratorNested。remove(); \t \t \t \t IF(map.size()<= 0) \t \t \t \t \t iteratorCentral.remove()。 \t \t \t \t \t} – ZelelB

関連する問題