지금까지 Map을 사용하면서 Value형에 배열이나 List 등과 같은 Collection을 사용해본 적은 별로 없었던 것 같다.
Map<Key형, Value형> mapName = new HashMap<>();
Map에 직접 배열을 put 하면 되지 않을까?
요청 사항을 작업하던 중 Map의 Value 값에 배열을 넣어야해서 먼저 아래와 같이 시도해보았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import java.util.HashMap; import java.util.Map; public class Main { public static void main (String[] args) { Map<String,String[]> multiMap = new HashMap<>(); multiMap.put("key04", {"value4_1","value4_2","value4_3"}); // ERROR!! } } | cs |
Value를 String 배열로 하고 바로 배열을 넣었더니 ERROR가 뙁!!!!!!!!
[!] The method put(String, String[]) in the type Map<String,String[]> is not applicable for the arguments (String, String, String, String)
'{}' 중괄호로 감싼 것을 배열로 인식하지 않아 나는 에러였다..!!
한번에 동작해도 불안하지만 이런 간단한 것도 한번에 안되면 더 슬퍼..
그렇다면 배열은 어떻게 넣어야 할까?
방법은 간단하다.! Map에 put 하기 전에 배열을 미리 선언해 두고 그 배열을 인덱스 값으로 접근 하여 넣어주면 된다.
// 배열 선언 및 초기화
ex) String arr[] = {"A", "B", "C"};
Map<key형, 배열형[ ]> mapName = new HashMap<>();
mapName.put(key값, 배열[index]);
( ★ 작업하면서 2차원 배열을 사용해야했기에 예제도 2차원 배열로 만들었습니다. )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // 1-1. 2차원 배열 생성 String valueArr[][] = {{"value1_1","value1_2","value1_3"}, {"value2_1","value2_2","value2_3"}, {"value3_1","value3_2","value3_3"}}; // 1-2. Map에 배열 넣기 Map< String, String[] > arrMap = new HashMap<>(); arrMap.put("key01", valueArr[0]); arrMap.put("key02", valueArr[1]); arrMap.put("key03", valueArr[2]); // 2-1. Map에 List 넣기 LinkedList<String> valueList = new LinkedList<>(); valueList.add("AAA"); valueList.add("BBB"); valueList.add("CCC"); // 2-2. Map에 List 넣기 Map< String, LinkedList<String> > listMap = new HashMap<>(); listMap.put("key04", valueList.get(0)); listMap.put("key05", valueList.get(1)); listMap.put("key06", valueList.get(2)); | cs |
이렇게 배열이나 List를 미리 선언해두고 get하는 방법으로 Map에 넣어주면 에러없이 성공~~!!!!
확장: Map에 Collection 넣기
만약 Map에 Value 값으로 한가지로 정해지지 않고 여러 형태의 Collection을 넣고 싶다면?
Value를 Collection의 최상위 클래스인 Object로 지정 해주면 된다.
// 배열 선언 및 초기화
ex) String arr[] = {"A", "B", "C"};
Map<key형, Object> mapName = new HashMap<>();
mapName.put(key값, 배열);
mapName.put(key값, List);
mapName.put(key값, String);
mapName.put(key값, int);
.
.
.
( ★ 위 예제를 응용해보겠습니다. )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // 1. 2차원 배열 생성 String valueArr[][] = {{"value1_1","value1_2","value1_3"}, {"value2_1","value2_2","value2_3"}, {"value3_1","value3_2","value3_3"}}; // 2. List 생성 LinkedList<String> valueList = new LinkedList<>(); valueList.add("AAA"); valueList.add("BBB"); valueList.add("CCC"); /* 3. Map에 여러가지 값 넣기 */ Map< String, Object > multiMap = new HashMap<>(); multiMap.put("key01", valueArr[0]); // 배열 multiMap.put("key02", valueArr[1]); // 배열 multiMap.put("key03", valueList.get(0)); // List multiMap.put("key04", "This value type is String."); // String multiMap.put("key05", 1234); // int | cs |
여기까지 완료!!
위 예제처럼 Value 값이 정해지지 않은 경우 Object로 선언 하여 여러가지 값에 대하여 대응할 수 있다.
★ 한 가지 더!!
당연히 key값도 Object형으로 주어지면 여러 형태의 key값이 가능하다.
1 2 3 4 5 6 7 | String keyArr[] = {"AA", "BB", "CC"}; Map< Object, Object > multiMap = new HashMap<>(); multiMap.put("1", 1234); multiMap.put(keyArr[1], 1234); multiMap.put(3, 1234); | cs |
그럼 오늘도 여기까지 급 마무으리~~~ Ho!!! ♪
' └ JAVA' 카테고리의 다른 글
[JAVA] 현재 시간, 날짜 구하기 (0) | 2019.08.16 |
---|---|
[Spring] 자주 쓰는 스프링(Spring framework) 어노테이션(Annotation) 정리 (0) | 2019.08.02 |
[JAVA] 무한대 정수 BigInteger 사용하기 (0) | 2016.04.11 |
[Java] 스트림의 개념, 종류/파일 입출력/InputStream/OutputStream/Reader/Writer (6) | 2015.07.28 |
[JAVA] 자바 별찍기 (0) | 2014.07.20 |