Java 에서 Map 안의 요소 반복문으로 꺼내기.
package dev.jeaha.practice;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class MapIterationPractice {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("k00", "v00");
map.put("k01", "v01");
map.put("k02", "v02");
map.put("k03", "v03");
map.put("k04", "v04");
map.put("k05", "v05");
map.put("k06", "v06");
map.put("k07", "v07");
map.put("k08", "v08");
map.put("k09", "v09");
map.put("k10", "v10");
System.out.println(">>>> SOLUTION 01-1 <<<<");
/**
* Generic 미사용.
* Java 버젼이 낮을 경우 사용할 수 있는 방법.
*/
Iterator entries = map.entrySet().iterator();
while( entries.hasNext() ) {
Map.Entry entry = (Map.Entry) entries.next();
String key = (String) entry.getKey();
String val = (String) entry.getValue();
System.out.println( String.format("key : %s, value : %s", key, val ) );
}
System.out.println("\n\n>>>> SOLUTION 01-2 <<<<");
/**
* Generic, Entry 사용
*/
Iterator<Map.Entry<String, String>> entriex = map.entrySet().iterator();
while( entriex.hasNext() ) {
Map.Entry<String, String> entry = entriex.next();
System.out.println( String.format("key : %s, value : %s", entry.getKey(), entry.getValue() ) );
}
System.out.println("\n\n>>>> SOLUTION 01-3 <<<<");
/**
* Generic 사용, Entry 미사용
*/
Iterator<String> keys = map.keySet().iterator();
while( keys.hasNext() ) {
String key = keys.next();
System.out.println( String.format("key : %s, value : %s", key, map.get(key)) );
}
System.out.println("\n\n>>>> SOLUTION 02 <<<<");
/**
* Entry에 for-each loop 사용.
* 가장 일반적이고 많은 경우에 사용됨.
* 반복문 안에서 key 값과 value 값이 전부 필요할 때 사용.
* Java 1.5 이상부터 사용 가능. NullPointerException 발생 가능.
*/
for( Map.Entry<String, String> entry : map.entrySet() ) {
System.out.println( String.format("key : %s, value : %s", entry.getKey(), entry.getValue() ) );
}
System.out.println("\n\n>>>> SOLUTION 03 <<<<");
/**
* entry 대신에 key 값이나 value 값만 필요할 때 사용.
* entrySet을 사용할 때보다 약 10% 빠르다고 함.
*/
for( String key : map.keySet() ) {
System.out.println( String.format("key : %s", key ) );
}
for( String value : map.values() ) {
System.out.println( String.format("value : %s", value ) );
}
System.out.println("\n\n>>>> SOLUTION 04 <<<<");
/**
* 코드상으로는 깔끔해 보이지만 비효율 적이고 성능면에서 좋지 않은 방법.
* key 값을 이용해서 value 를 찾는 과정에서 시간 소모가 많음.
* SOLUTION 02에 비해 20~200% 성능 저하 유발.
*/
for( String key : map.keySet() ) {
System.out.println( String.format("key : %s, value : %s", key, map.get(key) ) );
}
System.out.println("\n\n>>>> SOLUTION 05 <<<<");
/**
* stream을 사용한 forEach.
*/
map.entrySet()
.stream()
.forEach(System.out::println);
System.out.println("\n\n>>>> SOLUTION 06 <<<<");
/**
* forEach 및 Lambda를 사용한 반복.
* forEach() 내에서 람다 표현식 사용.
*/
map.forEach( (key, val) -> {
System.out.println( String.format("key : %s, value : %s", key, val ) );
});
}
}
728x90
반응형
'Language > Java' 카테고리의 다른 글
[Java] 문자열이 날짜 형식인지 확인하기 (0) | 2021.10.18 |
---|---|
[Java] 성능을 고려한 try-catch 문 (0) | 2020.12.16 |
[JAVA] 구 버젼 설치 (0) | 2020.11.02 |
[Java] ArrayList Sort (0) | 2020.05.22 |