JCF : Map

Jamangstangs·2022년 3월 13일
0

Roadmap

목록 보기
8/8
post-thumbnail

Map

Interface Map< K, V >

  • Collection이 하나의 객체를 관리하기 위한 인터페이스라면, Map은 Key-Value 쌍으로 이루어진 객체를 저장하기 위한 인터페이스이다.

  • K : 객체의 Key의 Type이다.

  • V : 객체의 Value의 Type이다.

  • Map에 구현된 Entry Interface -> Key - Value 쌍을 Inner Interface로 구현했다.

    • Map.Entry<K,V> : Map 내부의 Entry Interface, 구현해야하는 메서드는 다음과 같다.
      1. equals(Object o) :
      2. getKey() : Entry의 key를 반환한다.
      3. getValue() : Entry의 value를 반환한다.
      4. hashCode() : Entry의 HashCode를 반환한다.
      5. setValue(Object Value) : 대응하는 entry의 value를 인자로 전달된 value로 바꿔준다.
  • Map이 구현해야하는 메소드는 다음과 같다. 주요한 메소드만 설명하고, 나머지는 출처에 가서 확인하자.

    1. Clear() : map의 모든 entry를 제거한다.
    2. containsKey(Object Key) : Map이 해당 Key를 가진 Entry를 가지고 있는지 확인한다.

    ... 나머지는 출처에서 확인하자.

  • Map의 SubInterface는 다음과 같다.

    1. HashMap < K, V >
    2. TreeMap < K, V >
    3. HashTable < K, V >

출처 : https://docs.oracle.com/javase/8/docs/api/java/util/Map.html

HashMap

  • Key - Value로 구성된 Entry 객체를 저장하는 자료구조이다.
  • Key를 기준으로 중복을 허용하지 않는다. -> HashCode를 사용하여 중복을 방지한다.
  • 해시충돌 처리 방법
    • Open Addressing : 인접 인덱스 값을 구해서 해시 충돌을 우회한다.
    • Seperatre Chaining : 동일한 해시값이 있으면, Linked List로 관리한다.
  • 사용법은 아래와 같다.
// HashMap 생성
HashMap<Integer,Integer> hashMap1 = new HashMap<Integer, Integer>();
// HashMap의 용량을 지정하여 생성
HashMap<Integer,Integer> hashMap2 = new HashMap<Integer, Integer>(100);
// 초기 용량과 load factor을 지정하여 생성
HashMap<Integer,Integer> hashMap3 = new HashMap<Integer, Integer>(100, 0.8f);
// 초기 값을 설정해여 생성할 수 있다. 
HashMap<Integer,Integer> hashMap3 = new HashMap<Integer, Integer>(){
  {
    put(1,1);
		put(2,2);
		put(3,3);
  }
};

Method

  • 추가
HashMap<Integer,String> hashMap = new HashMap<Integer, Integer>();

// 값을 추가하며, key, value 순서로 넣어주면 된다. 
hashMap.put(1,"One");
hashMap.put(2,"Two");
hashMap.put(3,"Three");
  • 제거
HashMap<Integer,String> hashMap = new HashMap<Integer, Integer>();
hashMap.put(1,"One");
hashMap.put(2,"Two");
hashMap.put(3,"Three");

hashMap.remove(1);	// key가 1인 Entry를 제거한다. 
hashMap.clear();		// 모든 Entry를 제거한다. 
  • 출력
HashMap<Integer,String> hashMap = new HashMap<Integer, Integer>();
hashMap.put(1,"One");
hashMap.put(2,"Two");
hashMap.put(3,"Three");

// 특정 key의  value를 얻기
System.out.println(hashMap.get(1));

// KeySet()을 사용하여 for문을 사용한다.-> Key를 기준으로 순회
for(Integer i : hashMap.keySet()){
  System.out.println("Key " + i + "Value " + hashMap.get(i))
}

// entrySet()을 사용하여 for문을 사용한다. -> Entry를 기준으로 순회
for(Entry<Integer,String> e : hashMap.entrySet()){
  System.out.println("Key " + e.getKey() + "Value " + e.getValue);
}

// Iterator를 사용한다.
Iterator<Entry<Integer,String>> iterator = hashMap.entrySet().iterator();
while(iterator.hasNext()){
  System.out.println("Key " + iterator.next().getKey() + "Value " + iterator.next().getValue());
}

TreeMap

  • TreeSet과 같이, Red-Black 트리를 기반으로 키를 기준으로 오름차순으로 정렬한다.
    • Key가 Integer -> 숫자 오름차순
    • Key가 String -> 유니코드 오름차순
  • Key - Value로 이루어진 Entry를 저장하는 자료구조이다.
  • Key의 중복을 허용하지 않는다.
  • 사용법은 아래와 같다.
// TreeMap 생성
TreeMap<Integer, Integer> treeMap1 = new TreeMap<Integer,Integer>();
// 초기 값을 설정해여 생성할 수 있다. 
TreeMap<Integer,Integer> treeMap2 = new TreeMap<Integer, Integer>(){
  {
    put(1,1);
		put(2,2);
		put(3,3);
  }
};
  • 추가
TreeMap<Integer,String> treeMap = new TreeMap<Integer, String>();

// 값을 추가하며, key, value 순서로 넣어주면 된다. 
treeMap.put(1,"One");
treeMap.put(2,"Two");
treeMap.put(3,"Three");
  • 제거
TreeMap<Integer,String> treeMap = new TreeMap<Integer, String>();
treeMap.put(1,"One");
treeMap.put(2,"Two");
treeMap.put(3,"Three");

treeMap.remove(1);	// key가 1인 Entry를 제거한다. 
treeMap.clear();		// 모든 Entry를 제거한다. 
  • 출력
TreeMap<Integer,String> treeMap = new TreeMap<Integer, Integer>();
treeMap.put(1,"One");
treeMap.put(2,"Two");
treeMap.put(3,"Three");

// 특정 key의  value를 얻기
System.out.println(treeMap.get(1));

// HashMap과 다르게, 정렬을 하여 저장하므로 Entry 출력방식이 다양한다. 
System.out.println(treeMap.get(1));
System.out.println(treeMap.firstEntry(1));	//최소 Entry를 출력한다. 
System.out.println(treeMap.lastEntry(1));		//최대 Entry를 출렧한다. 
System.out.println(treeMap.firstKey()); 		//최소 key를 출력한다. 
System.out.println(treeMap.lastKey());			//최대 key를 출력한다. 

// KeySet()을 사용하여 for문을 사용한다.-> Key를 기준으로 순회
for(Integer i : treeMap.keySet()){
  System.out.println("Key " + i + "Value " + treeMap.get(i))
}

// entrySet()을 사용하여 for문을 사용한다. -> Entry를 기준으로 순회
for(Entry<Integer,String> e : treeMap.entrySet()){
  System.out.println("Key " + e.getKey() + "Value " + e.getValue);
}
profile
자망스탕스

0개의 댓글