본문 바로가기
└ JAVA

[JAVA] Map에 배열/List 넣기 (Object형 사용)

by 짜장이누나 2017. 12. 20.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

지금까지 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< StringString[] > 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(31234);
cs

 

 

 

 

 

 

 

 

 

 

그럼 오늘도 여기까지 급 마무으리~~~ Ho!!! ♪