ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [okky 질문글 답변] map에 대하여
    개발/Java 2021. 4. 5. 18:23

    okky.kr/article/903802?note=2290174

     

    OKKY | Map과 Hashmap의 차이는 어떤 알고리즘을 쓰느냐의 차이인가요?

    Map은 이진탐색트리, Hashmap은 해쉬테이블을 쓴다고 하는데, 어떤경우에 Map을쓰고 또 어떤경우에 Hashmap을 쓰는지 모르겠습니다.. 그리고 이런식으로 정의하는건 어떤의미인지 잘 파악이 안됩니다

    okky.kr

    질문 제목

    Map과 Hashmap의 차이는 어떤 알고리즘을 쓰느냐의 차이인가요?

     

    본문 

    Map은 이진탐색트리, Hashmap은 해쉬테이블을 쓴다고 하는데,

     

    어떤경우에 Map을쓰고 또 어떤경우에 Hashmap을 쓰는지 모르겠습니다..

     

    그리고 이런식으로 정의하는건 어떤의미인지 잘 파악이 안됩니다..ㅠ

    private static Map<Long, Member> store = new HashMap<>();

     

     

    나의 답변 

    1.

    Map이란 key-value로 값을 저장하는 자료구조를 의미하구요, 자바에서는 Map의 행동을 정의해놓은 인터페이스입니다.

    Map 인터페이스를 구현한 구현체로 HashTable, HashMap, TreeMap, LinkedHashMap, Properties 등이 있는데요

    즉 질문하신 Map과 HashMap은 직접 비교대상이 아닙니다. Map의 한 종류로  HashTable, HashMap 등이 있는거죠.

     

    말씀하신 이진 트리를 기반으로 한 Map은 TreeMap 입니다. 이진 트리를 기반으로 저장했다는건 탐색에 용이하겠죠.  (값이 n 이상인 객체를 탐색하기 등)

     

    HashTable과 HashMap은 키 객체의 해시값을 버킷이라는 곳에 저장하고 있고 그 값을 통해 객체를 뽑아와서 O(1)의 속도로 객체를 찾아올 수 있는게 장점입니다. 

     

    그렇다면 HashTable과 HashMap의 차이는 무엇이냐? (아래 설명에서 버전은 확실하지가 않습니다;;)

    HashTable은 자바 1.0부터 존재하던 구현체로 thread-safe 하고 null 값을 허용하지 않습니다.

    HashMap은 자바 1.2에 생겨난 구현체로 thread-safe하지 않고 null을 허용합니다. (HashMap을 thread-safe하게 사용하고 싶다면 Collections 클래스에 synchronizedMap() 메서드를 사용하시면 됩니다)

     

    --

    2. private static Map<Long, Member> store = new HashMap<>(); 의 의미

     Map<Long, Member> store Map 인터페이스를 구현한 모든 객체를 담을 수 있다는 의미

    = new HashMap<>(); : Map의 구현체인  HashMap을 생성해서 할당하겠다는 의미

     

    물론 HashMap<Long, Member> store = new HashMap<>(); 으로 선언하셔도 동작하는데 전혀 문제가 없습니다.

    이 부분은 자바의 다형성과 관련이 있다고 보시면 됩니다.  

     

    -- 

    1번 문제에 관해선 아무 자바 기본서에서 Collection 관련된 부분을 학습하시면 좋고

    2번 문제에 관해선 역시 자바 기본서에서 Collection + 인터페이스 관련된 부분을 학습하시고, 객체지향과 관련된 서적을 찾아보시면 이해하는데 큰 도움이 되실것 같습니다.

    객체지향 서적 : 객체지향의 사실과 오해, 오브젝트 (조영호) 강추합니다!

    댓글

Designed by Tistory.