kkkkkkkkkkkk
kkkkk
kkkkkkkkkkkk
전체 방문자
오늘
어제
  • 분류 전체보기
    • CS & OS
    • Algorithms
    • Laguage
    • Book
      • 객체지향의 사실과 오해
      • Effective Java
      • Spring boot 와 AWS로 혼자 구현하는 ..
      • 도메인 주도 계발 시작하기
    • DB
    • Spring
    • Spring Boot
    • JPA
    • Git
    • Clean Code
    • HTTP

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 역할
  • 객체지향 프로그래밍
  • 설계 원칙
  • 결합도
  • 응집도
  • 책임

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
kkkkkkkkkkkk

kkkkk

Algorithms

[JAVA] Map 구현

2022. 1. 11. 15:25

학습 내용

Map의 구조를 알수 있습니다.

 

  • 추가
    • key, value 추가
  • 조회
    • key 에 해당하는 value 값 조회
  • 삭제
    • key 에 해당하는 entry 값 삭제

MyEntry.class


    private K key;
    private V value;

    public MyEntry(K key, V value) {
        this.key = key;
        this.value = value;
    }

    @Override
    public K getKey() {
        return key;
    }

    @Override
    public V getValue() {
        return value;
    }

    @Override
    public V setValue(V value) {
        return this.value = value;
    }

}

Entry 인터페이스를 구현하였습니다.

 


MyMap 구현

 

필드

List<MyEntry> entries = new ArrayList<>();

Entry 타입으로만 받는 인스턴스를 생성합니다.

 


기능 구현하기 앞서 헬퍼 메서드를 구현

private MyEntry findEntry(Object target) {
    for (MyEntry entry : entries) {
        if (equals(target, entry.getKey())){
            return entry;
        }
    }
    return null;
}

private boolean equals(Object target, Object obj) {
    if (target == null) {
        return obj == null;
    }
    return target.equals(obj);
}

List에 담겨 있는 entry의 정보 key 를 target 객체와 비교하여 리턴하는 기능입니다.

 

시간 복잡도는 O(n) 으로 보여집니다.


추가

1. key, value 추가하기

public V put(K key, V value) {
    MyEntry entry = findEntry(key);
    if (entry == null) {
        entries.add(new MyEntry(key, value));
        return null;
    } else {
        V oldValue = (V) entry.getValue();
        entry.setValue(value);
        return oldValue;
    }
}

입력 받은 key 가 존재 하는 지 검사를 하고 null 이라면 List 에 새로운 Entry를 생성하고 key, value 를 저장합니다.

key 가 존재 한다면 입력 받은 value 값만 entry 에 저장합니다.

 

findEntry() 메서드가 선형이므로 O(n) 이라는 시간 복잡도를 가집니다.


조회

1. key 에 해당하는 value 값 조회

public V get(Object key) {
    MyEntry entry = findEntry(key);
    if (entry == null) {
        return null;
    }
    return (V) entry.getValue();
}

중복된 key 가 있는지 검사하고 null 이면 null 을 리턴 합니다.

그렇지 않다면 해당 key 의 value 를 리턴 합니다.

 

시간 복잡도는 O(n) 입니다.


삭제

1. key 에 해당하는 entry 값 삭제

public V remove(Object key) {
    MyEntry entry = findEntry(key);
    if (entry == null) {
        return null;
    } else {
        V value = (V) entry.getValue();
        entries.remove(entry);
        return value;
    }

해당 key 를 찾고 List 에 담겨져있는 entry 의 정보를 삭제합니다.

 

시간 복잡도는 O(n) 입니다.

'Algorithms' 카테고리의 다른 글

[Sort] 버블 정렬 (Bubble Sort)  (0) 2022.06.26
[Sort] 선형 탐색 (Linear Search)  (0) 2022.06.26
[JAVA] 해싱 동작 방식  (0) 2022.01.17
[JAVA] 성능을 개선한 Map 구현 (해싱)  (0) 2022.01.17
[JAVA] Stack 구현  (0) 2022.01.11
[JAVA] LinkedList 구현  (0) 2022.01.10
[JAVA] ArrayList 구현  (0) 2022.01.09
[JAVA] 선택 정렬 ( Selection Sort )  (0) 2022.01.09
    'Algorithms' 카테고리의 다른 글
    • [JAVA] 해싱 동작 방식
    • [JAVA] 성능을 개선한 Map 구현 (해싱)
    • [JAVA] Stack 구현
    • [JAVA] LinkedList 구현
    kkkkkkkkkkkk
    kkkkkkkkkkkk

    티스토리툴바