파트3. Map(맵)

유태형·2022년 4월 26일
0

알고리즘 - Java

목록 보기
2/32

출처

해당 게시글은 [Java] 어서와! 자료구조 알고리즘은 처음이지?https://programmers.co.kr/learn/courses/13577를 간략히 요약한 게시글이며 모든 출처는 해당강의에 있습니다.




2-1

Array와 List의 장단점

Array는 빠르지만 유연하지 못하고, List는 유연하지만 느린 장단점이 존재합니다!



Array와 List의 특징을 합치기

해당 인덱스로 간다음 그곳에서 또 다시 리스트형식으로 확장하면 Array와 List의 장점을 합칠수 있습니다!

hashing : 적절히 겹치지 않도록 index에 지정합니다.
hash collision : 값은 다르지만 해시 값이 동일하다는 의미입니다. Map에서는 리스트로 확장합니다.




2-2

Map 만들기

Hashtable<,>레퍼런스와 Map<,> 인터페이스로 Map객체를 가리킬 수 있습니다. 또한 Map을 상속받는 Hashtable<>(), HashMap<>(), ConcurrentHashMap<>()로 자료구조를 만들 수 있습니다.

예를 들어

Hashtable<String, Integer> map = new Hashtable<>();
Map<String, Integer> map = new Hashtable<>();
Map<String, Integer> map = new HashMap<>();
Map<String, Integer> map = new ConcurrentHashMap<>();

와 같이 맵 객체를 만들 수 있습니다.



Map의 메서드

Map<String,Integer> 객체 map이 있다고 가정하고 리스트를 나열 하겠습니다.

map.put("A",1); : "A" Key에 1의 값을 넣습니다.
map.replace("A",1,11); : "A"가 1이면 11로 변경합니다.
map.remove("B",3); : "B"가 3이면 삭제합니다.
map.putIfAbsent("C",10); : "C"가 존재하지 않는다면 value 10 삽입, 존재하면 안 넣음.
map.getOrDefault("C",-1)' : "C"가 존재하면 반환, 존재하지 않는다면 디폴트값 -1 반환합니다.
map.keySets(); : key들만 뽑아냅니다.
map.values(); : value들만 뽑아냅니다.



Map에 객체 넣기

class MyData{
    int v;

    public MyData(int v){
        this.v = v;
    }

    public String toString(){
        return "[" + v + "]";
    }

    @Override
    public boolean equals(Object o) { //객체간 비교시 객체 주소가 아닌 값 비교
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MyData myData = (MyData) o;
        return v == myData.v;
    }

    @Override
    public int hashCode() { //값 비교시 해쉬값 비교
        return Objects.hash(v);
    }
}

객체를 Map에 삽입하기 위해선 2가지 메서드를 오버라이딩 해야 합니다.
객체의 주소가 아닌 객체가 가진 값을 비교하기위해 equals()메서드를 또 그 값을 가지고 해쉬값으로 만들기 위해 hashCode()메서드를 오버라이딩 해야합니다.



Map객체 3종 비교

  • HashMap : not sync, 멀티 쓰레드x, 속도
  • Hashtable : sync, 쓰레드, 안정성
  • ConcurrentHashMap : sync + high concurrency


GitHub

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%5BJava%5D%20%EC%96%B4%EC%84%9C%EC%99%80%20%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%80%20%EC%B2%98%EC%9D%8C%EC%9D%B4%EC%A7%80/%ED%8C%8C%ED%8A%B82.List(%EB%A6%AC%EC%8A%A4%ED%8A%B8)/Map%EC%8B%A4%EC%8A%B5.java

profile
오늘도 내일도 화이팅!

0개의 댓글