JAVA 기초 (37) Map 인터페이스

코린이서현이·2023년 8월 13일
0

Java

목록 보기
38/46

😿들어가면서😿

오늘은 역사적으로 공부하기 싫어도 하는 날이다 👏👏👏

📕 Map 인터페이스

  • Map 인터페이스는 자료를 쌍(key -value)으로 관리하는데 필요한 메서드가 정의되어있다.
  • key 값은 중복이 불가능하고 value는 해시함수에따라 저장위치에 정해진다.

📘 HashMap 클래스

  • Map 인터페이스는 자료를 쌍(key -value)으로 관리하는데 필요한 메서드가 정의되어있다.
  • key 값은 중복이 불가능하고 value는 해시함수에따라 저장위치에 정해진다.
    👉 key값을 알면 value이 저장된 메모리공간을 바로 알수 있다. 따라서 자료 추가속도나 검색속도가 빠른 장점이 있다.
  • ⚠️ key값은 중복이 불가능하기 때문에 HashMap 클래스을 사용할 클래스는 eqauls()와 hashcode()를 오버라이딩해야한다.
  • key값을 가지고 인덱스를 계산하는데 다른 key값인데도 같은 인덱스를 반환해 충돌이 일어날 위험이 있다.
    👉 자바에서는 충돌을 방지하기 위해 테이블 메모리의 75%이하로만 사용하도록 메모리를 자동확장한다.

📖 HashMap 메소드

✅ 생성자

생성자설명
HashMap<>()
HashMap<>(HashMap인스턴스참조변수)HashMap인스턴스참조변수의 모든 값을 가진 HashMap생성
HashMap<>(10)초기 용량(capacity)지정
HashMap<>(10, 0.7f)초기 capacity,load factor지정

✅ 메소드

메소드설명
put(key, value)주어진 키와 값을 해시 맵에 저장합니다. 이미 같은 키가 존재하는 경우, 기존 값은 새로운 값으로 대체됩니다.
get(key)주어진 키에 해당하는 값을 반환합니다. 키가 존재하지 않을 경우 null을 반환합니다.
remove(key)주어진 키에 해당하는 키-값 쌍을 해시 맵에서 제거합니다.
containsKey(key)주어진 키가 해시 맵에 존재하는지 여부를 확인합니다.
containsValue(value)주어진 값이 해시 맵 내에 존재하는지 여부를 확인합니다.
size()해시 맵에 저장된 키-값 쌍의 개수를 반환합니다.
isEmpty()해시 맵이 비어있는지 여부를 반환합니다.
keySet()해시 맵 내의 모든 키를 포함하는 Set 컬렉션을 반환합니다.
values()해시 맵 내의 모든 값을 포함하는 Collection을 반환합니다.
entrySet()해시 맵 내의 모든 키-값 쌍을 포함하는 Set 컬렉션을 반환합니다.
putAll(map)다른 맵의 모든 키-값 쌍을 현재 해시 맵에 복사합니다.
clear()해시 맵의 모든 키-값 쌍을 제거하여 비웁니다.

📒 해시함수

index = hash(key); 		//index는 저장위치

✍️ 실습하기

💡 ir.next()은 현재 값을 반환하고 다음 값으로 넘어감

package map;

import collection.Member;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

class MemberHashMap {
  HashMap<Integer, Member> memberHashMap;

  public MemberHashMap() {
    memberHashMap = new HashMap<>();
  }


  public void addMember (Member member) {
    memberHashMap.put(member.getMemberId(), member);
  }

  public Member removerMember(int memberId) {
    if (memberHashMap.containsKey(memberId)){
      return memberHashMap.remove(memberId);
    }
    return null;
  }

  public void memPrintAll () {
    Iterator<Integer> ir = memberHashMap.keySet().iterator();
    while (ir.hasNext()) {
      int key = ir.next();
      System.out.println("키 값 : " + key + "\n" + memberHashMap.get(key));
    }
  }
}


public class HashMapTest {
  public static void main(String[] args) {

    ArrayList<Member> members = new ArrayList<>();

    members.add(new Member(1001,"김이석"));
    members.add(new Member(1002,"강현민"));
    members.add(new Member(1003,"황연현"));
    members.add(new Member(1004,"진권석"));

    MemberHashMap memberHashMap = new MemberHashMap();

    for (Member member : members) {
      memberHashMap.addMember(member);
    }

    memberHashMap.memPrintAll();

    System.out.println(memberHashMap.removerMember(1001));
    System.out.println(memberHashMap.removerMember(1007));


  }

👉 실행화면

키 값 : 1001
김이석 회원님의 아이디는 1001입니다.
키 값 : 1002
강현민 회원님의 아이디는 1002입니다.
키 값 : 1003
황연현 회원님의 아이디는 1003입니다.
키 값 : 1004
진권석 회원님의 아이디는 1004입니다.

김이석 회원님의 아이디는 1001입니다.
null

📘 Hashtable 클래스

Hashtable 클래스 : 멀티스레드를 위한 동기화를 제공한다.
멀티스레드 환경이 아니라면 HashMap 클래스를 권장한다.

📘 TreeMap 클래스

key값은 중복이 없으며 key 값으로 자료를 정렬한다.
👉 key값은 중복이 불가능하기 때문에 HashMap 클래스을 사용할 클래스는 eqauls()와 hashcode()를 오버라이딩해야한다.
👉 key 값이 새로 정의한 클래스라면 Comparable 인터페이스와 Comparartor 인터페이스를 구현해야한다.

Comparable 인터페이스와 Comparartor 인터페이스 구현은 전 글에서 상세히 정리했기 때문에 생략하겠다.

📖 TreeMap 메소드

✅ 생성자

생성자설명
TreeMap()빈 TreeMap을 생성합니다. 기본적으로 키의 자연 순서(natural order)에 따라 정렬됩니다.
TreeMap(Comparator<T> comparator)지정된 Comparator를 사용하여 TreeMap을 생성합니다. 이 생성자를 사용하면 키의 정렬 순서를 사용자가 직접 지정할 수 있습니다.
TreeMap(Map<T,V> map)주어진 맵의 모든 키-값 쌍을 가지고 새로운 TreeMap을 생성합니다.

✅ 주요 메소드

메소드설명
put(key, value)주어진 키와 값을 TreeMap에 저장합니다. 키가 이미 존재할 경우 기존 값은 새로운 값으로 대체됩니다. 반환 값은 이전 값 또는 null입니다.
get(key)주어진 키에 해당하는 값을 반환합니다. 키가 존재하지 않을 경우 null을 반환합니다.
remove(key)주어진 키에 해당하는 키-값 쌍을 TreeMap에서 제거합니다. 반환 값은 해당 키의 값 또는 null입니다.
containsKey(key)주어진 키가 TreeMap에 존재하는지 여부를 확인합니다.
size()TreeMap에 저장된 키-값 쌍의 개수를 반환합니다.
isEmpty()TreeMap이 비어있는지 여부를 반환합니다.
firstKey()가장 작은 키를 반환합니다.
lastKey()가장 큰 키를 반환합니다.
keySet()TreeMap 내의 모든 키를 포함하는 NavigableSet을 반환합니다.
values()TreeMap 내의 모든 값을 포함하는 Collection을 반환합니다.
entrySet()TreeMap 내의 모든 키-값 쌍을 포함하는 Set 컬렉션을 반환합니다.
higherKey(key)주어진 키보다 큰 다음 키를 반환합니다.
lowerKey(key)주어진 키보다 작은 이전 키를 반환합니다.
floorKey(key)주어진 키와 같거나 작은 키 중 가장 큰 키를 반환합니다.
ceilingKey(key)주어진 키와 같거나 큰 키 중 가장 작은 키를 반환합니다.
pollFirstEntry()가장 작은 키를 가진 키-값 쌍을 제거하고 반환합니다.
pollLastEntry()가장 큰 키를 가진 키-값 쌍을 제거하고 반환합니다.

😙마무리하면서😙

유용하게 써보자~

profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글