Java에서 HashMap 사용하기

 

예전에는 데이터를 저장하고자 하면 배열에다가 차곡차곡 쌓아놓적이 있습니다.

받는 데이터들을 그대로 저장만 하면 되니 간편하지만, 반대로 데이터를 가져올 때 매우 불편하였습니다.

커질수록 한없이 늘어나는 데이터 속에서 내가 원하는 데이터를 찾는다면 점차점차 느려지게 하였습니다.

 

그에 따라 이 방법을 보안하고자 점차 발달한게 Key-Value 컨셉입니다.

데이터를 저장하고 특정 키로 검색하면 값을 바로 받아볼 수 있기 때문에 데이터량이 증가되도 빠르게 원하는 데이터를 찾을 수 있었습니다.

 

자바에서 Key-Value 컨셉인 Map을 주로 설명하는데 이중에서 HashMap을 설명할 예정입니다.

 

HashMap은 Key-Value 값에 null을 허용하기 때문에 유용하게 쓰일 수 있습니다.

 

 

1. HashMap

 

HashMap 의 사용법에 대해서 알아보도록 하겠습니다.

 

1-1. 선언

 

기본적으로 Map을 선언하고 HashMap을 불러옵니다

 

Map map = new HashMap();
또는
HashMap map = new HashMap();

 

그리고 이클립스에서 HashMap을 사용하려면 뒤에 Key-Value의 변수형을 명확하게 해주는 것을 권장하고 있습니다.

아래와 같이 정해줄 경우, 데이터의 형식이 일정하다보니 좀더 빠르게 찾을 수 있고, 보기에도 명확합니다.

 

HashMap<String, Integer> map = new HashMap<String, Integer>();

 

1-2. 데이터 저장

 

간단하게 put 명령으로 저장할 수 있습니다.

예를 들어, key 는 String으로 Value 는 Int 형으로 저장해보도록 하겠습니다.

 

map.put("국어", 90);
map.put("수학", 80);

 

1-3. 데이터 불러오기

 

불러오는 것은 get 명령으로 값을 가져올 수 있습니다.

get 뒤에 key를 넣어주면 됩니다.

 

System.out.println("국어 점수 : " + map.get("국어"));

국어 점수 : 90

 

 

2. HashMap + List

 

이번에는 HashMap을 여러개 사용해서 생성된 데이터를 List 에 추가한 다음 가져와보도록 하겠습니다.

 

2-1. 샘플(1)

 

아래와 같이 2개의 데이터를 저장해보도록 하겠습니다.

 

Map map;
List list = new ArrayList();

// 첫번째
map = new HashMap();
map.put("국어", 90);
map.put("수학", 80);
list.add(map);

// 두번째
map = new HashMap();
map.put("국어", 55);
map.put("수학", 65);
list.add(map);

 

저장한 데이터를 출력하면 아래와 같이 나옵니다.

 

System.out.println(list);

[{수학=80, 국어=90}, {수학=65, 국어=55}]

 

2-2. 샘플(2)

 

이제 집어넣은 데이터를 가져올 차례입니다.

 

List 에 저장된 HashMap 데이터를 사용하기 위에서는 HashMap을 만든 다음, 캐스팅 연산으로 가져오도록 합니다.

 

HashMap getMap = new HashMap();

getMap = (HashMap)list.get(0);
System.out.println("1번째 국어 점수 : " + getMap.get("국어"));

getMap = (HashMap)list.get(1);
System.out.println("2번째 국어 점수 : " + getMap.get("국어"));

 

출력된 결과는 아래와 같이 나타납니다.

 

1번째 국어 점수 : 90

2번째 국어 점수 : 55

 

데이터가 많으면 for 문으로 돌리면 됩니다.

 

 

~(^_ ^ )~

 

Map 종류에는 HashMap 말고도 TreeMap도 있고, 각각마다 기능이 다양합니다.

예를 들어 HashMap 의 경우는 데이터 저장이 느리지만, 데이터를 가져올 때는 빠르게 가져올 수 있습니다.

그리고 Key 랑 Value 값에 null을 허용하기 때문에 저장할 때, 데이터가 빠져있어도 문제가 되지 않습니다.
TreeMap 은 HashMap 에 비해서는 데이터 저장이 조금 빠르고 가져올 때 약간 느립니다.

정렬할 수 기능이 있다고 하는데 아직 해보지 않았네요.