티스토리 뷰

안녕하세요. 이전 포스팅에서 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 클래스에 대해 알아봤습니다.

 

 

 

 

댓글