Java & Android
Java Map 활용
그레이트쪼
2017. 1. 10. 19:59
- Map iteration 하기
1. Entry 이용하기
1 2 3 4 | for (Map.Entry<String, String> entry : mMap.entrySet()) { System.out.println(entry.getKey() + "/" + entry.getValue()); } |
2. Iterator 이용하기
1 2 3 4 5 | Iterator<Entry<String, String> iter = myMap.entrySet().iterator(); while (iter.hasNext()) { Entry<String, String> entry = iter.next(); System.out.println(entry.getKey() + "/" + entry.getValue()); } |
- Map으로부터 value의 List 뽑아내기
- Map의 values() 메소드를 사용한다.
1 | List<Value> list = new ArrayList<Value>(map.values()); |
- Map의 특정 element update하기
- 그냥 같은 key로 put하면 기존 값이 update됨. Don't worry~
- Map의 특정 element delete하기
- 첫 번째 iteration 방법 (Entry를 이용하기)으로 remove하는 코드를 작성하면
1 2 3 4 | for (Map.Entry<String, String> entry : mMap.entrySet()) { mMap.remove(entry.getKey()); } |
java.util.ConcurrentModificationException이 발생한다.
"Exception in thread "main" java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(Unknown Source) at java.util.HashMap$EntryIterator.next(Unknown Source) at java.util.HashMap$EntryIterator.next(Unknown Source)" |
- 따라서 두 번째 iteration 방법 (Iterator 이용하기)으로 remove하는 코드를 작성해야 한다.
1 2 3 4 | Iterator<Entry<String, String> iter = myMap.entrySet().iterator(); while (iter.hasNext()) { iter.remove(); } |
첫 번째 방법도 사실 내부적으로 iterator를 사용하는데 iterator가 map의 수정이 발생한 것을 detect 했을 때 예외를 발생시킨다. 두 번째 방법은 iterator를 통해서 remove를 했기 때문에 예외가 발생하지 않는 것이다.