티스토리 뷰

JAVA(프로그래밍)

java HashMap 사용하는 방법

알 수 없는 사용자 2018. 7. 24. 07:30

안녕하세요. 이번 시간에는 java HashMap에 대해 사용하는 방법을 알아보겠습니다.

실무에서 제법 많이 사용하는 편이라 사용법을 알아두시면 도움이 될듯 싶습니다.

가장 많이 쓰이는 메소드는 put 입니다.

사용방법도 간단하니 소스를 통해 사용법을 익혀보도록 하겠습니다.

HashMap map= new HashMap(); // map변수를 가진 HashMap 객체를 생성
  map.put("arg1", "호랑이");   // String 값을 arg1에 담습니다.

 ArrayList list= new ArrayList();
  list.add("test1");
  list.add("test2");
  map.put("args2", list);

// HashMap에는 어떠한 오브젝트도 가능합니다. ArrayList 를 선언하여 String이 아닌 arrayList 객체를 저장합니다.


  map.put("args3", 9000); // int 값을 저장


  String map1= map.get("arg1") + "";
  ArrayList list1= (ArrayList)map.get("args2");

 

put이 데이타를 저장할때 쓰인다면 get 은 반대로 저장된 값을 꺼내 올때 쓰이는 메소드입니다.

  int len= list.size();

  System.out.println("len->" + len);

  for (int i= 0; i < len; i++) {

   System.out.println(list.get(i));
  }

 

실행결과입니다

len->2
test1
test2

해당 소스는 map에 list 객체를 담은후 다시 반대로 꺼내서 출력하는 소스입니다.

 

// map.remove("args2");

remove메소드를 사용하여 저장된 값을 삭제할수 있습니다.

list를 args2에 저장한걸 다시 삭제하였으므로 더이상arg2에는 값이 존재하지 않습니다.

 

 

remove를 이용하여 제거한수 결과값을 출력해보겠습니다.

결과값

list2는 map에서 삭제되었으므로 더이상 객체가 아니다.

 

이번에는 HashMap에 있는 Set에 대해 알아보겠습니다.

이전에는 put을 이용하여 담은 값을 get을 이용하여 데이타를 추출하였습니다.

담은 value값을 알고 있어야만 get을 이용해서 추출할수 있었습니다.

하지만 value를 모르고 있을때 사용할수 있는 방법이 Set 입니다.

 

 Set keySet = map.keySet();
  Iterator<E> iter = keySet.iterator();
  
  while(iter.hasNext()) {
   
   String key = (String)iter.next();
   System.out.println("key" + key);
   Object obj = map.get(key);
   System.out.println("obj->"+ obj);
   
   System.out.println("type->" + obj.getClass());
   
  }

 

결과값

keyarg1
obj->호랑이
type->class java.lang.String
keyargs3
obj->9000
type->class java.lang.Integer

 

iterator를 이용하여 key값을 얻어낸후 해당 키값을 이용하여 데이타를 꺼내고 있습니다.

어떤 타입이 저장될지 모르기에  getClass를 이용하여 해당 Object 타입을 알아낼수가 있습니다.

 

putAll 이라는 메소드는 자주 쓰이지는 않지만 알아보도록 하겠습니다.

 

 HashMap m1 = new HashMap();
  m1.put("a1", "1111");
  m1.put("a2", "2222");
  m1.put("a3", "3333");
  
  HashMap m2 = new HashMap();
  m2.put("b1", "111111");
  m2.putAll(m1);
  
  Set keySet2 = m2.keySet();
  Iterator<E> iter2 = keySet2.iterator();
  
  while(iter2.hasNext()) {
   
   String key = (String)iter2.next();
   System.out.println("key" + key);
   Object obj = m2.get(key);
   System.out.println("obj->"+ obj);
   
   System.out.println("type->" + obj.getClass());
   
  }

putAll을 사용하게 되면 일일이 put할 필요없이 HashMap에 있는 값들을 전부 다른 객체에 복사가 가능합니다.

 

HashMap 은 인자값 전달 할때 유용하게 쓰인답니다. 동적 파라메터 일 경우 map으로 담아서 사용하면 편리합니다.

 

ex) getUserName(String userId)

getUserName 메소드에 파라메터가 String userId가 있습니다.

지금은 하나의 파라메터만 필요한데 추후에 파라메터 갯수가 늘어나는 상황이 일어날수도 있습니다.

그러면 모든 메소드 호출하는 부분에서 파라메터를 추가를 해줘야 합니다.

getUserName(String userId, String AuthCd);

 

getUserName 메소드를 호출하는 곳이 많다면 일일이 수정을 해줘야 겠죠.

 

하지만 HashMap을 사용해서 파라메터를 주고 받으면 아무래 많은 파라메터가 추가되도

호출하는 부분은 바뀌지가 않습니다.

 

HashMap map = new HashMap();

map.put("userId", userId);

map.put("authCd", authCd);

getuserName(map);

 

 

여기까지 HashMap에 대해 알아봤습니다.

 

 

 

 

 

 

 


 

 

 

댓글