본문 바로가기
JAVA(프로그래밍)

java HashMap 대신 순서대로 사용하려면 LinkedHashMap를 사용하자.

by 켈리113 2018. 7. 24.

안녕하세요. 이전 포스팅에서 HashMap에 대해 알아보았습니다.
간단히 복습하자면 put으로 데이타를 저장하고 get으로 데이타를 추출해서 사용합니다.

하지만 HashMap에는 저장한 순서대로 출력이 되지 않습니다.
만약 데이타의 입력순서대로 출력이  필요하게 될 상황이 생긴다면 어떻게 해야 할까요?

다행이 자바에는 LinkedHashMap가 있습니다. 이 메소드는 입력순서대로 출력을 제공합니다.

 


LinkedHashMap 은 기본적으로 HashMap을 상속받아 만들어져 있게 때문에 HashMap의 기능을 그대로 사용가능합니다.
대신 여기에 순서라는 개념이 들어간답니다. 좀 더 업그레이드된 기능이라고 보시면 됩니다.

 


기존 HashMap 은 <INPUT, OUTPUT> 처럼 INPUT 를 입력하여 OUTPUT 를 가져오는 방식입니다.

입력하는 순서대로 값을 추출할때 가져올수 있다면 정말 베스트겠지만 아쉽게 순서기능이 없기때문에
HashMap에서는 순서를 사용할수가 없습니다. 특별한 기준없이 출력이 된다는 거죠.

 

LinkedHashMap 을 사용하면 Iterator를 사용하여 값을 추출할때 순서에 맞게 가져올수 있는 장점이 있습니다.

 

입력시의 순서에 맞게 값을 가져올수 있습니다.


예제를 통해서 알아보겠습니다.

--------------------------------------------------------------------------------------------------

package test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;

public class Test {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
 
 
 
  HashMap<String,String> hashMap  = new HashMap<String,String>();

 
  hashMap.put("1","a");
  hashMap.put("3","c");
  hashMap.put("2","b");
  hashMap.put("4","d");
  hashMap.put("5","e");

 
  System.out.println("-----------hashMap은 입력 순서대로 출력이 보장되지 않는다.");
  System.out.println("-----------hashMap에 data를 담아서 출력---------");
  for( Iterator linkitr = hashMap.values().iterator(); linkitr.hasNext(); ) {

   System.out.print( linkitr.next() + " " );
  }  
  
  System.out.println("\n-----------linkedHashMap은 입력 순서대로 출력이 보장된다.");
  System.out.println("\n-----------linkedHashMap에 data를 담아서 출력---------");
  LinkedHashMap<String,String> linkedHashMap  = new LinkedHashMap<String,String>();


  linkedHashMap.put("1","a");
  linkedHashMap.put("3","c");
  linkedHashMap.put("4","d");
  linkedHashMap.put("5","e");
  linkedHashMap.put("2","b");

 

  for( Iterator linkitr = linkedHashMap.values().iterator(); linkitr.hasNext(); ) {

   System.out.print( linkitr.next() + " " );
  } 
  


 }

}

-----------------------------------------------------------------------------------------------

해당 소스를 컴파일하고 실행하면 결과값은 다음과 같습니다.


-----------hashMap은 입력 순서대로 출력이 보장되지 않는다.
-----------hashMap에 data를 담아서 출력---------
a b c d e
-----------linkedHashMap은 입력 순서대로 출력이 보장된다.

-----------linkedHashMap에 data를 담아서 출력---------
a c d e b

 

 


결과값을 보시면 알겠지만 HashMap는 입력 순서대로 출력이 되지 않는걸 알수있습니다.

  hashMap.put("1","a"); //첫번째 입력
  hashMap.put("3","c"); //두번째 입력
  hashMap.put("2","b");   //세번째 입력
  hashMap.put("4","d");   //네번째 입력
  hashMap.put("5","e");   //다섯번째 입력

입력순서대로 출력이 되야하지만 결과값은

 a //첫번째 입력값
        b // 세번째 입력값
        c // 두번째 입력값
        d // 네번째 입력
        e //다섯번째 입력

입력 순서대로 데이타가 출력이 되지 않는걸 확인할수 있습니다.
입력 순서대로 출력이 되었다면
a c b d e
이런식으로 출력이 되어야 하겠죠.

이런 결과값을 원할때 사용하는 메소드가 바로 linkHashMap 입니다.


이렇게 입력한 순대대로 결과을 추출 하고 싶을때는 linkHashMap을 사용하시면 됩니다.

결과값을 보시면 입력한 순서대로 출력이 된걸 확인할수 있습니다.

a c d e b

 

여기까지 예제를 통해서 java LinkedHashMap 클래스에 대해 알아봤습니다.