Daily coding

Java Basic : day 11 - Map ( HashMap, TreeMap ) 본문

Language/Java_basic

Java Basic : day 11 - Map ( HashMap, TreeMap )

sunnnkim 2019. 12. 2. 19:10

HashMap : 

  - 사전이라고도 함(dictionary)
  - 쌍으로 이루어짐 : key, value
  - web에서는 hashmap과 같은 기능을 수행하는 Json이 있다 (XML 단점 보완)
  - ** 중복된 key 값을 사용할 수 없다 ** (multiMap은 중복 키값이 가능)

 

  - tree 구조 :
  * 리스트 : 선형구조 0-0-0-0-0-0-...
  * 맵 : 어느 부분에 들어갈 지 모름, 이진트리로 이루어짐
       0
    0     0
  0  0  0  0

- 검색이 아주 우수하다 (빠름)
 
 
 

TreeMap :

  - HashMap  + sorting 기능이 추가됨
  - 오름차순, 내림차순이 모두 구현된다
  - 무조건 key값으로만 sorting이 된다.(value는 불가능)
 

 

//선언하기


Map<Integer, String> hMap = new HashMap();
 또는

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

 



put(key, value);

- 추가 : 데이터 집어넣기


hMap.put(111, "백십일"); // 데이터를 찾는 기준은 모두 key값임 (키값은 주소값 절대 아님)
hMap.put(222, "이백이십이");
hMap.put(333, "삼백삼십삼");

 


get(key);
// value 취득하기


String value = hMap.get(111); // ()안에 키값 넣으면 해당 데이터의 value값 나옴
System.out.println("value : " + value); // value : 백십일


검색하기


1. 값이 있는지 없는지 검색
containsKey(key)


boolean b = hMap.containsKey(333); // 333 키값이 있는지 확인
System.out.println(b);
// true

2. 검색 후 값을 꺼냄
- 조건문으로 containKey( ) 로 키값 여부 확인 후 출력하기


if (hMap.containsKey(333)) {
        value = hMap.get(333);
        System.out.println("value : " + value);
        // value : 삼백삼십삼
}


삭제하기


remove(key)
String removeVal = hMap.remove(222);
// return값 있음 (삭제된 키 값의value 리턴)
System.out.println(removeVal + "값이 삭제되었습니다.");
// 출력 : 삼백삼십삼값이 삭제되었습니다.


 

수정하기


1. put사용하기
hMap.put(111, "100 + 10 + 1");
System.out.println(hMap.get(111)); //
// 이미 있는 키 값에 put을 사용하면 원래 value에 덮어씌워짐


2. replace(key, value);
hMap.replace(111, new String("1 + 10 + 100")); // 정석
hMap.replace(111, "1 + 10 + 100");
System.out.println(hMap.get(111));



key 값을 모두 출력하기

 

Iterator
Iterator it = hMap.keySet().iterator();  
// 검색은 Key값의 자료형으로 템플릿 지정
while(it.hasNext()) {
        Integer key = it.next();
        System.out.println("Key : " + key); // iterator에 key가 넘어오기 때문에 Integer 변수로 받아옴
        String valueStr = hMap.get(key);
        System.out.println("Value : " + valueStr);
} // 추가된 순서대로 나오지 않음


 

HashMap<String, String> sMap = new HashMap<String, String>( );

 


// 추가
sMap.put("apple", "사과");
sMap.put("pear", "배");
sMap.put("grape", "포도");
sMap.put("banana", "바나나");

 


// 값을 취득
String getStr = sMap.get("grape");
System.out.println("getStr : " + getStr); // 출력 : 포도

 


// 모두 출력하기
Iterator sKey = sMap.keySet().iterator();
while(sKey.hasNext()) {
String key = sKey.next();
System.out.print("Key : " + key);
String printVal = sMap.get(key);
System.out.println(", Value : " + printVal);
} // 트리 형태이기 때문에 순서대로 출력되지 않는다

 

 


정렬하기 (숫자, 문자정렬) -> key값으로 정렬

 


 HashMap <---> TreeMap

// TreeMap으로 호환해서 정렬해서 쓰기
// TreeMap이 좀 더 무거움 (여러개 쓸 때는 차이가 확연해짐)
TreeMap<String, String> tMap = new TreeMap<String, String>(sMap);
// TreeMap(Map m) 

                ---> Map 인터페이스를 상속받은 해쉬맵 등을 TreeMap으로 호환하여 정렬하는데 주로 사용
// hashMap에 비해 무겁기 때문에 많이 사용하는 것보다는 정렬이 필요할때 호환하여 쓰는 경우가 많다.

 

 


오름차순


// 트리맵의 기본구조 : 오름차순
Iterator itKey = tMap.keySet().iterator();
System.out.println("오름차순 ");
while(itKey.hasNext()) {
        String key = itKey.next();
        String tVal = tMap.get(key);
        System.out.println("Key : " + key + " Value : " + tVal);
}

 

 

내림차순

 

// 키셋 메소드를 descendingKeySet()으로 사용하면 역순으로 출력 
Iterator itKey2 = tMap.descendingKeySet().iterator();
System.out.println("내림차순 ");
while(itKey2.hasNext()) {
        String key = itKey2.next();
        String tVal = tMap.get(key);
        System.out.println("Key : " + key + " Value : " + tVal);
}




 

어레이리스트를 맵으로 집어넣기


int count = 1;
ArrayList list = new ArrayList();
list.add("Tigers");
list.add("Giants");
list.add("Lions");

HashMap<Integer,String> myMap = new HashMap<Integer, String>();
        for (int i = 0; i < list.size(); i++) {
                myMap.put(count, list.get(i));
                count++;
}

// 맵을 리스트에 넣기 ( 생활코딩 )



}

}