JavaのList・Mapのfor文処理覚書
久々にJavaを使うと忘れてたりするのでメモっとく。
対象のJavaはJava6です。
Javaはバージョンによってコーティングの常識が違うので注意が必要、
特にfor文は色々な書き方が出来るので非常に紛らわしい。
Listのfor文
// 例:ArrayList List<SomeClass> list = new ArrayList<SomeClass>(); // 拡張for文:推奨 for (SomeClass item : list) { // itemを処理 } // イテレータ:拡張for文が使えない場合に使用(要素の追加や削除が必要な場合など) for (Iterator<SomeClass> it = list.iterator(); it.hasNext(); ) { SomeClass item = it.next(); // itemを処理 } // インデックス:非推奨 for (int i = 0, size = list.size(); i < size; i++) { SomeClass item = list.get(i); // itemを処理 }
Mapのfor文
拡張for文を使用した場合
// 例:HashMap Map<KeyClass, ValueClass> map = new HashMap<KeyClass, ValueClass>(); /*--- 拡張for文 ---*/ // 拡張for文:キーをループ for (KeyClass key : map.keySet()) { // keyを処理 } // 拡張for文:値をループ for (ValueClass val : map.values()) { // valを処理 } // 拡張for文:キーと値をループ for (Map.Entry<KeyClass, ValueClass> entry : map.entrySet()) { // キーを取得 KeyClass key = entry.getKey(); // 値を取得 ValueClass val = entry.getValue(); }
イテレータを使用した場合
// 例:HashMap Map<KeyClass, ValueClass> map = new HashMap(KeyClass, ValueClass>(); /*--- イテレータ ---*/ // イテレータ:キーをループ for (Iterator<KeyClass> it : map.keySet().iterator(); it.hasNext(); ) { KeyClass key = it.next(); // keyを処理 } // イテレータ:値をループ for (Iterator<ValueClass val : map.values().iterator(); it.hasNext(); ) { ValueClass val = it.next(); // valを処理 } // イテレータ:キーと値をループ for (Iterator<Map.Entry<KeyClass, ValueClass>> it = map.entrySet().iterator(); it.hasNext(); ) { // entryを取得 Map.Entry<KeyClass, ValueClass> entry = it.next(); // キーを取得 KeyClass key = entry.getKey(); // 値を取得 ValueClass val = entry.getValue(); }
配列のfor文(おまけ)
// 初期化 SomeClass array[] = { new SomeClass(), new SomeClass() }; // 拡張for文:推奨 for (SomeClass item : array) { // itemを処理 } // インデックス:非推奨 for (int i = 0, len = array.length(); i < size; i++) { SomeClass item = array[i]; // itemを処理 }
List・Mapに関して覚えておくべき項目について
とりあえずよく遭遇する状況を選抜
- List・Mapの初期化方法
- ループ中に要素の追加・削除を行う方法
- List(コレクション)と配列の相互変換