Map Collection

홍정완·2022년 8월 9일
0

lay the ground work

목록 보기
6/18
post-thumbnail
  • Map Collection은 키와 값을 하나의 쌍으로 저장하는 방식(key-value 방식) 사용

    • 저장 순서 유지 ❌
    • 키 중복 ❌, 값 중복 ⭕



HashMap<K, V>


JDK 1.2부터 제공된 HashMap 클래스는 해시 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠르다.

HashMap 클래스는 Map 인터페이스를 구현하므로, 중복된 키로는 값을 저장할 수 없다.
하지만 같은 값을 다른 키로 저장하는 것은 가능하다.


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

hm.put("십", 10);
hm.put("이십", 20);

System.out.println("맵에 저장된 키들의 집합 : " + hm.keySet());

for (String key : hm.keySet()) {
    System.out.println(String.format("키 : %s, 값 : %s", key, hm.get(key)));
}

hm.remove("십");

Iterator<String> keys = hm.keySet().iterator();

while (keys.hasNext()) {
    String key = keys.next();
    System.out.println(String.format("키 : %s, 값 : %s", key, hm.get(key)));
}

hm.replace("이십", 200);

for (String key : hm.keySet()) {
    System.out.println(String.format("키 : %s, 값 : %s", key, hm.get(key)));
}

System.out.println("맵의 크기 : " + hm.size());
맵에 저장된 키들의 집합 : [이십, 십]

키 : 이십, 값 : 20
키 : 십, 값 : 10

키 : 이십, 값 : 20

키 : 이십, 값 : 200

맵의 크기 : 1
  • keySet()
    • 해당 맵에 포함된 모든 키를 하나의 집합(Set)으로 반환



TreeMap<K, V>


이진 검색 트리는 데이터를 추가하거나 제거하는 등의 기본 동작 시간이 매우 빠르다.

JDK 1.2부터 제공된 TreeMap 클래스는 NavigableMap 인터페이스를 기존의 이진 검색 트리의 성능을 향상시킨 레드-블랙 트리(Red-Black tree)로 구현한다.


TreeMap<Integer, String> tm = new TreeMap<Integer, String>();

tm.put(30, "삼십");
tm.put(40, "사십");

System.out.println("맵에 저장된 키들의 집합 : " + tm.keySet());

for (Integer key : tm.keySet()) {
    System.out.println(String.format("키 : %s, 값 : %s", key, tm.get(key)));
}

tm.remove(40);

Iterator<Integer> keys = tm.keySet().iterator();

while (keys.hasNext()) {
    Integer key = keys.next();
    System.out.println(String.format("키 : %s, 값 : %s", key, tm.get(key)));
}

tm.replace(20, "twenty");

for (Integer key : tm.keySet()) {
    System.out.println(String.format("키 : %s, 값 : %s", key, tm.get(key)));
}

System.out.println("맵의 크기 : " + tm.size());
맵에 저장된 키들의 집합 : [30, 40]

키 : 30, 값 : 삼십
키 : 40, 값 : 사십

키 : 30, 값 : 삼십

키 : 20, 값 : twenty
키 : 30, 값 : 삼십

맵의 크기 : 2



Collections


  • 모두 static 메서드로 구성

  • 컬렉션 타입의 객체에 대한 객체 생성, 정렬, 병합, 검색 등의 알고리즘을 구현



max() / min()

  • 가장 큰 요소 / 가장 작은 요소 반환

  • List<Integer> arr = Arrays.asList(list);

    • 일반 배열을 ArrayList로 변환
Integer[] list = { 1, 2, 3, 4, 5 };
List<Integer> arr = new ArrayList<>(Arrays.asList(list));
		
System.out.println(Collections.max(arr)); // 5
System.out.println(Collections.min(arr)); // 1



sort()

  • 지정된 컬렉션을 오름차순으로 정렬
Integer[] list = { 3, 1, 2, 4, 5 };
List<Integer> arr = new ArrayList<>(Arrays.asList(list));

Collections.sort(arr);
System.out.println(arr);  // [1, 2, 3, 4, 5]



shuffle()

  • 지정된 컬렉션의 값을 랜덤으로 뒤섞어준다.
Integer[] list = { 1, 2, 3, 4, 5 };
List<Integer> arr = new ArrayList<>(Arrays.asList(list));

Collections.shuffle(arr);
System.out.println(arr); // [2, 4, 5, 1, 3]



reverse()

  • 지정된 컬렉션의 순서를 역순으로 변경한다.
Integer[] arr = {1,2,3,4,5};
List<Integer> list = new ArrayList<>(Arrays.asList(arr));
		
Collections.reverse(list);
System.out.println(list); // [5, 4, 3, 2, 1]
profile
습관이 전부다.

0개의 댓글