2012-02-15 14 views
2

以前は、レコードのオブジェクトを格納するArrayListを設定しました。私はそれ以来、オブジェクトが格納されているHashMapでArrayListを置き換え、個人のユーザー名文字列をキーとして使用しています。Java - ArrayListを置き換えるHashMapでの反復

このディレクトリのクラスは、Iterable implements Iterable<Object>(ちょっと質問はありませんが、なぜ<Object>が必要ですか?)を実装しています。

のArrayListを反復するために使用前のコードだった:次のように

public Iterator iterator() { 
     return records.iterator(); 
    } 

私はそのクラス内のすべてのオブジェクトに対して、このイテレータを使用:残念ながら

for (Object o : directory) { 
      TelephoneRecords temp = (TelephoneRecords) o; 
      System.out.println(temp.toString()); 
    } 

、HashMapName.iterable( );問題が発生しているようですが、HashMapを使ってこの動作をどうやって行っていますか?

答えて

0

私はrecords.values().iterator();で(動作しませんでした)records.iterator();を交換すると私の問題を解決しました。あなたはHashMapを直接反復することはできないようですが、その中の値(オブジェクト)を繰り返し処理することができます。

さらに、HashMapの内容を取得して印刷することで、次のコードを解決しました。 TelephoneRecords o : directoryで指定されているディレクトリ内のTelephoneRecordsオブジェクトと、ディレクトリクラス内のIteratorメソッドを反復処理します。次に、テンポラリオブジェクトが反復処理されるTelephoneRecordsオブジェクトに割り当てられ、[custom] toString()メソッドがその特定のTelephoneRecordsオブジェクトの文字列を出力するために使用されます。

for (TelephoneRecords o : directory) { 
    TelephoneRecords temp = (TelephoneRecords) o; 
    System.out.println(temp.toString()); 
} 

そして私は、ディレクトリオブジェクトに含まTelephoneRecordsオブジェクトを反復するIterator<TelephoneRecords>(というよりも、単にオブジェクトを使用)を使用して、提供されるヘルプに従うことにより、私の小さなサイド疑問を解決することになりました。

0

は「問題を引き起こしているようです」と回答しました? HashMapでは、キー(map.keySet())、値(map.values())、またはキーと値のペア(map.entrySet())を反復処理できます。

0

ハッシュマップからエントリセットを使用して、それと同じ方法で繰り返し処理できます。

また
for (Object o : Directory.getEntrySet()) { 

}

、あなたのハッシュマップを入力すると、それはキャストの必要性を除去します -

Map<String, TelephoneRecords> 
5

あなたが鍵でのみ興味があるなら、あなたはを反復処理することができますマップののkeySet():

Map<String, Object> map = ...; 

for (String key : map.keySet()) { 
    // ... 
} 

あなただけの値を、使用値を()が必要な場合

for (Object value : map.values()) { 
    // ... 
} 

最後に、あなたがキーと値の両方をしたい場合は、のentrySetを(使用):

for (Map.Entry<String, Object> entry : map.entrySet()) { 
    String key = entry.getKey(); 
    Object value = entry.getValue(); 
    // ... 
} 

希望これはあなたを助けます。

1

ハッシュマップのentrySetを反復処理できます。 entrySetには、キーと値のセットが含まれます。キーと値は、getKey()とgetValue()でアクセスできます。

for (Map.Entry<String, Object> entry : map.entrySet()) { 
    String username = entry.getKey(); 
    TelephoneRecord record = (TelephoneRecord)entry.getValue(); 
    // Do something with username and record ... 
} 

あなたのオフ質問:これは、次のコードによって行うことができ

オブジェクトのIterableにはオブジェクトが含まれていることを述べていたHashMap、の型パラメータです。あなたのHashMapのみTelephoneRecordsオブジェクトを格納することになっている場合は、順番に、あなたがキャストを避け、コンパイルエラーを取得することができますこれは、あなたの反復処理可能にTelephoneRecordsが含まれていることを言っているその方法

implements Iterable<TelephoneRecords> 

implements Iterable<Object> 

を置き換えます間違ったことをしている場合はランタイムエラーではなく(これが好ましい!)それはに上記のコードを改善する:

for (Map.Entry<String, TelephoneRecord> entry : map.entrySet()) { 
    String username = entry.getKey(); 
    TelephoneRecord record = entry.getValue(); 
    // Do something with username and record ... 
} 
+0

なぜ私のrecords.iterator()に問題がありますか。 ? – mino

+0

HashMapを直接反復処理することはできません。entrySetを使用する必要があります。したがって、Iteratorを作成したい場合は、Iterator > mapEntries = records.entrySet()。iterator();を実行します。 –

関連する問題