drexqq

[Java, 자바] HashMap, TreeMap 본문

Back-End/Java

[Java, 자바] HashMap, TreeMap

drexqq 2020. 6. 10. 08:53
728x90
반응형

Java의 HashMap과 TreeMap에 대해서 알아보자.

 

HashMap과 TreeMap은 Map Collection이다.

 

Map Collection은 key와 value를 한 쌍으로 값을 저장한다.

 

 public static void main(String[] args) {
        HashMap<String, Integer> a = new HashMap<String, Integer>();
        a.put("one", 1);
        a.put("two", 2);
        a.put("three", 3);
        a.put("four", 4);
        System.out.println(a.get("one"));
        System.out.println(a.get("two"));
        System.out.println(a.get("three"));
         
        iteratorUsingForEach(a);
        iteratorUsingIterator(a);
    }
     
    static void iteratorUsingForEach(HashMap map){
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }
     
    static void iteratorUsingIterator(HashMap map){
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        Iterator<Map.Entry<String, Integer>> i = entries.iterator();
        while(i.hasNext()){
            Map.Entry<String, Integer> entry = i.next();
            System.out.println(entry.getKey()+" : "+entry.getValue());
        }
    }

Map을 선언할때는 제네릭에 key자료형과 value의 자료형을 순서대로 선언해 준뒤 사용한다.

 

List에서 데이터를 추가할때 add메서드를 사용했다면 Map에서는 put메서드를 사용한다.

 

또한 Map에서 데이터을 가져올 때는 get(key)메서드를 사용한다.

 

get메서드를 사용하게 된다면 해당 key가 value를 가지고 있다면 key에 value를 String형태로 return해주고 value를 가지고 있지 않다면 null을 return해준다.

 

특정한 데이터을 찾고 싶다면 continasKey(key)메서드를 사용해준다.

containsKey(key)메서드는 해당 key가 value를 가지고 있다면 true를 업다면 false를 return해준다.

 

데이터을 수정하고 싶다면 2가지 방법이 있다.

처음에 말한 put메서드를 사용하여 데이터을 key와 value에 다시 추가하거나 replace메서드를 사용한다.

put메서드를 다시 사용하는 것은 좋지 않은 방법이다.

특정 데이터를 수정하고 싶다면 replace(key, value)메서드를 사용하자.

바꾸고싶은 key값과 value값을 적어주면 해당하는 key와 value의 데이터가 바뀌게 된다

 

Iterator<Integer> it = a.keySet().iterator();
while(it.hasNext()) {
	Integer key = it.next();
	System.out.println("key : " + key);

	String _value = a.get(key);
	System.out.println("value : " + _value);
}

위 방법은 내가 사용한 Map에 담겨 있는 데이터를 출력하는 방법이다. Iterator를 사용하였다.

 

마지막으로 Map은 List와 다르게 선형구조가 아니여서 데이터를 순서대로 넣어도 담겨있는 주소값이 순서대로 저장되지 않는다.

 

따라서 Map을 사용했을때 정렬을 하고 싶다면

 

TreeMap<String, String> treeMap = new TreeMap<String, String>( a );
		
		// 오름
Iterator<String> itKey = treeMap.keySet().iterator();
while(itKey.hasNext()) {
	String key = itKey.next();
	String _value = treeMap.get(key);
	System.out.println("key : " + key + "\tvalue : " + _value);
}

// 내림
itKey = treeMap.descendingKeySet().iterator();
while(itKey.hasNext()) {
	String key = itKey.next();
	String _value = treeMap.get(key);
	System.out.println("key : " + key + "\tvalue : " + _value);
}

위와 같이 TreeMap을 사용해서 정렬해보도록하자.

 

정렬하고 싶은 HashMap의 순서를 바꾸지 않고 정렬하는 방법이다.

 

새로운 TreeMap을 선언해 준 뒤 해당 HashMap을 대입해준다.

 

그 뒤에 Iterator타입을 선언해 준 뒤를 keySet메서드와 iterator메서드를 사용하여 값을 저장해준다.

 

여기서 keySet메서드는 key값을 오름차순으로 데이터를 정렬해준다.

 

아래서 볼 수 있는 descendingKeySet은 내림차순으로 데이터를 정렬해준다.

728x90
반응형

'Back-End > Java' 카테고리의 다른 글

[Java, 자바] Singleton(싱글톤)  (0) 2020.06.10
[Java, 자바] 스택(Stack), 큐(Queue)  (0) 2020.06.10
[Java, 자바] Iterator  (0) 2020.06.09
[Java, 자바] LinkedList  (0) 2020.06.09
[Java, 자바] Abstract  (0) 2020.06.09
Comments