[Java] Map 인터페이스

2021. 4. 15. 17:54

1. Map Interface ?

  • key-value 방식 사용
  • 요소의 저장 순서를 유지하지 않음
  • 키의 중복을 허용하지 않지만, 값의 중복은 허용 (같은 값을 다른 키로 저장 가능)
  • 서로 다른 type의 데이터 저장이 유용 (String, Integer 같이  저장 가능)
  • HashMap, TreeMap

출처 https://coding-factory.tistory.com/556

 

2. HashMap 클래스

  • Map 컬렉션 클래스에서 가장 많이 사용됨
  • Hash algorithm 사용으로 검색 속도가 빠름

2.1 HashMap 생성자

HashMap<String, String> map1 = new HashMap<String, String>();	
HashMap<String, String> map2 = new HashMap<>();
HashMap<String, String> map3 = new HashMap<>(map1);	// map1의 모든 값 복사하여 map3 생성
HashMap<String, String> map4 = new HashMap<>(10);	//초기 용량(capacity)지정
HashMap<String, String> map5 = new HashMap<>(10, 0.7f);	//초기 capacity, load factor지정
HashMap<String, String> map6 = new HashMap<String, String>(){{	//초기값 지정
    put("a","b");
}};

 

HashMap 안에 HashMap 넣기

HashMap<String, Object> parentsMap = new HashMap<String, Object>();
HashMap<Integer, Integer> childMap = new HashMap<>();
childMap.put(x, y);
parentsMap.put(key, childMap);

 

2.2 HashMap 멤버함수

map.put(key, value);	// 전달된 key에 대응하는 value로 매핑
map.replace(key, value);	// key에 대응하는 값을 value로 대체
map.remove(key);	// key에 대응하는 매핑 제거
map.clear();	// 모든 값 제거

map.get(key);	// key에 대응하는 value 반환. key 존재하지 않을 경우 null 반환
map.size();
map.isEmpty();

map.containsKey(key);	// map에 전달된 key 존재하는지 확인
map.containsValue(value);	// map에 전달된 value에 해당하는 하나 이상의 key 존재하는지 확인
map.getOrDefault(key, x);	// key 값이 존재하면 해당 key에 대응하는 value 반환, 없다면 x 반환

 

2.3 HashMap 값 출력

간단한 방법

HashMap<Integer, String> map = new HashMap<Integer, String>(){{	// 초기값 지정
    put(1,"사과");
    put(2,"바나나");
    put(3,"포도");
}};

System.out.println(map);	// 전체 출력 : {1=사과, 2=바나나, 3=포도}
System.out.println(map.get(1));	// key값 1의 value얻기 : 사과

 

entrySet() 사용

key와 value 모두 필요할 경우 사용. 많은 양의 데이터를 가져올 경우 편리.

for (Entry<Integer, String> entry : map.entrySet()) {
    System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}

 

keySet() 사용

map에 존재하는 모든 key로 만들어진 set 객체 반환

for(Integer i : map.keySet()){	// set에 저장된 key값 확인
    System.out.println("[Key]:" + i + " [Value]:" + map.get(i));
}

 

Iterator 사용

// entrySet().iterator()
Iterator<Entry<Integer, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
    Map.Entry<Integer, String> entry = entries.next();
    System.out.println("[Key]:" + entry.getKey() + " [Value]:" +  entry.getValue());
}
//[Key]:1 [Value]:사과
//[Key]:2 [Value]:바나나
//[Key]:3 [Value]:포도
		
//keySet().iterator()
Iterator<Integer> keys = map.keySet().iterator();
while(keys.hasNext()){
    int key = keys.next();
    System.out.println("[Key]:" + key + " [Value]:" +  map.get(key));
}
//[Key]:1 [Value]:사과
//[Key]:2 [Value]:바나나
//[Key]:3 [Value]:포도

//values().iterator()
Iterator<Integer> values = map.values().iterator();
while(it.hasNext()) {
	int value = values.next();
    System.out.println( "[Value]:" + value);
}

 

3. TreeMap 클래스

  • Red-Black tree 형태로 map-entry 저장
  • TreeMap에 객체 저장시 자동 정렬 ( key에 대한 오름차순 )
  • 추가, 삭제가 HashMap에 비해 느리지만 탐색은 편리함

3.1 TreeMap 생성자

TreeMap<Integer, String> map1 = new TreeMap<Integer,String>();
TreeMap<Integer, String> map2 = new TreeMap<>();	
TreeMap<Integer, String> map3 = new TreeMap<>(map1);	// map1의 모든 값을 복사한 요소를 가진 map3 생성
TreeMap<Integer, String> map6 = new TreeMap<Integer, String>(){{	//	초기값 설정
    put(1,"a");
}};

 

3.2 TreeMap 멤버함수

map.put(key, value);
map.remove(key); 
map.clear();
map.size();
map.replace(key, value);

map.containsKey(key);
map.containsValue(value);

map.get(key);	// key 값의 entry 얻기
map.firstEntry();	// 최소(첫 번째) key와 대응하는 entry 반환 
map.firstKey();	// 최소 key 반환
map.lastEntry();	// 최대(마지막) key와 대응하는 entry 반환
map.lastKey();	// 최대 key 반환

map.ceilingEntry(key);	// 전달된 key 이상의 key 중 최소 key의 entry 반환, 없다면 null
map.ceilingKey(key);	// 전달된 key 이상의 key 중 최소 key 반환, 없다면 null
map.floorEntry(key);	// 전달된 key 이하의 key 중 최대 key의 entry 반환, 없다면 null
map.floorKey(key);	// 전달된 key 이하의 key 중 최소 key 반환, 없다면 null
map.higherEntry(key);	// 전달된 key보다 작은 key 중 최대 key의 entry 반환, 없다면 null
map.higherKey(key);	// 전달된 key보다 작은 key 중 최대 key 반환, 없다면 null
map.lowerEntry(key);	// 전달된 key보다 큰 key 중 최소 key의 entry 반환, 없다면 null
map.lowerKey(key);	// 전달된 key보다 큰 key 중 최소 key 반환, 없다면 null

map.descendingMap();	// map의 모든 매핑 역순으로 반환
map.haedMap(key);	// map에서 key 미만의 부분 반환
map.subMap(fromKey, toKey);	// map에서 [fromKey, toKey) 부분 반환
map.tailMap(fromKey);	// map에서 fromKey 이상의 부분 반환

 

3.3 TreeMap 값 출력

HashMap과 동일

'Java' 카테고리의 다른 글

[Java] String 클래스 메소드  (0) 2021.04.24
[Java] Arrays 클래스  (0) 2021.04.18
[Java] 문자열(String) 비교  (0) 2021.04.14
[Java] Iterator  (0) 2021.04.12
[Java] list  (0) 2021.04.12

+ Recent posts