Java

컬렉션 프레임워크(Map 인터페이스)

깊게 생각하고 최선을 다하자 2022. 5. 20. 01:46

Q1. Map 인터페이스의 특징은 무엇인가?
- Map 인터페이스는 key, value 쌍으로 데이터를 저장하는 인터페이스입니다.
이 때, key는 중복되어서는 안된다는 특징이 있습니다.
Map 인터페이스를 구현한 대표적인 클래스로는 HashMap 클래스, TreeMap 클래스,
LinkedHashMap 클래스 등이 있습니다.

Q2. Map 인터페이스에 새로운 key, value를 넣기 위한 메소드는 무엇인가?
- put() 메소드입니다.

Q3. Map 인터페이스에 해당 key가 있는지 판단하기 위한 메소드는 무엇인가?
- containsKey() 메소드입니다.


Q4. Map 인터페이스에 해당 value가 있는지 판단하기 위한 메소드는 무엇인가?
- containsValue() 메소드입니다.


Q5. Map 인터페이스에서 key 집합을 반환하기 위한 메소드는 무엇인가?
- keySet() 메소드입니다.


Q6. Map 인터페이스에서 value를 반환하기 위한 메소드는 무엇인가?
- values() 메소드입니다.

 

Q7. 자바에서의 Map은 무엇과 무엇으로 이루어져 있는가?

- key와 value로 이루어져 있습니다. 

 

Q8. HashTable 클래스는 무슨 인터페이스를 구현했는가?

- Map 인터페이스를 구현했습니다. 

 

Q9. HashMap 클래스와 HashTable 클래스의 차이점은 무엇인가?

- HashMap 클래스는 Thread-Safe하지 않고, null을 저장할 수 있습니다. 

  반면, HashTable 클래스는 Thread-Safe하고, null을 저장할 수 없습니다. 

 

Q10. HashTable을 제외한 Map으로 끝나는 클래스들은

         여러 쓰레드에서 동시에 접근하여 처리할 필요가 있을 때에는 

         어떻게 선언하여 사용해야만 하는가?

-  Collection.synchronizedMap 처리를 해줘야 합니다. 

 

Q11. HashMap에 객체가 들어가면 hashCode() 메소드의 결과 값에 따라 

         어떤 것이 만들어지는가?

 

 

Q12. HashMap은 무엇을 사용하여, HashTable에 비하여 무엇이 덜 발생할 수 있어서

         성능상 이점이 있는가?

 

 

Q13. HashTable 구현에는 무엇이 거의 없는 반면, HashMap 구현은 어떠한가?

- HashTable 구현에는 개선이 거의 없는 반면, HashMap 구현은 꾸준히 개선되고 있습니다. 

 

 

Q14. 어떤 X와 Y가 있을 때, X.equals(Y)가 거짓일 때, X.hashCode() != Y.hashCode()라면

         이 때 사용하는 해시 함수는 어떤 해시 함수인가?

- 완전 해시 함수입니다. 

 

 

Q15. '무엇'이나 '무엇'에 대해 완전 해시 함수를 제작하는 것은 사실상 불가능한가?

 

 

Q16. HashMap은 기본적으로 각 객체의 어떤 메서드가 반환하는 값을 사용하는가?

 

 

Q17. 32비트 정수 자료형으로는 왜 완전 해시 함수를 만들 수 없는가?

- 2의 32승-1개의 값만 나타낼 수 있기 때문입니다. 

 

 

Q18. HashMap을 비롯한 많은 해시 함수를 이용하는 associative array 구현체에서는 

         메모리를 절약하기 위해 실제 해시 함수의 표현 정수 범위(N)보다 작은

         몇 개의 원소가 있는 배열을 사용하는가?

        이를 코드로 나타내면 어떠한가?

 

 

Q19. Q18의 코드와 같은 방식을 사용하면 서로 다른 객체가 '어떤' 확률로 

         같은 해시 버킷을 사용하게 되는가?

 

 

Q20. 해시 충돌이 발생하더라도 키-값 쌍 데이터를 잘 저장하고 조회할 수 있도록 하는 두 가지 방식이 있는데,

         각각은 무엇인가?

- Open Addressing 방식과 Separate Chaining 방식이 있습니다. 

 

 

Q21. Open Addressing 방식이란 무엇인가?

- 특정 위치에 이미 데이터가 있다면, 다른 인접한 위치의 공간에 데이터를 저장하는 방식입니다. 

 

 

Q21-1. Open Addressing 방식에서 데이터를 저장/조회할 해시 버킷을 

            찾을 때, 어떤 방법을 사용하는가?

- Linear Probing 방식, Quadratic Probing 방식 등을 사용할 수 있습니다. 

 

Q22. Separate Chaining 방식이란 무엇인가?

- 특정 위치에 데이터를 하나가 아닌 여러 개를 저장할 수 있도록 

  Linked List나 Tree를 연결하는 방식입니다. 

 

Q23. Open Address 방식과 Separate Chaining 방식의 Worst case 시간 복잡도는 무엇인가?

 

Q24. Open Address은 연속된 공간에 데이터를 저장하기 때문에,

        Separate Chaining에 비하여 '무엇'이 높은가?

 

Q24-1 캐시 효율이란 무엇인가?

 

Q25. 데이터 개수가 충분히 적다면 무엇이 무엇보다 좋은가?

- Open Addressing 방식이 Seperate Chaining 방식보다 좋습니다. 

 

 

Q26. 배열의 크기가 커질수록 '무엇'이라는 Open Addressing 방식의 장점은 사라지는가?

         그 이유는 무엇인가?

 

 

 

Q26-1.  L1, L2 캐시 적중률이란 무엇인가?

 

 

Q27. Java HashMap에서 사용하는 방식은 무엇인가?

 

 

Q27-1. Open Addressing 방식은 무엇을 할 때 데이터를 효율적으로 처리하기 어려운가?

 - 삭제를 할 때 데이터를 효율적으로 처리하기 어렵습니다. 

 

 

Q27-2 HashMap에서는 무슨 메서드가 매우 빈번하게 호출될 수 있는가?

- 삭제 메서드가 빈번히 호출될 수 있습니다. 

 

 

Q28. HashMap에 저장된 키-값 쌍 개수가 일정 개수 이상으로 많아지면,

        일반적으로 무슨 방식은 무슨 방식보다 느린가?

        그 이유는 무엇인가?

- Open Addressing 방식이 Seperate Chaining 방식보다 느립니다. 

  그 이유는 hash collision이 많이 발생하기 때문입니다. 

 

 

Q29. Seperate Chaining 방식은 무엇이 잘 발생하지 않도록 조정할 수 있다면

         무엇 또는 무엇에 가까운 일이 발생하는 것을 줄일 수 있는가?

 

 

Q30. 자바7에서 해시 버킷 관련 구현은 어떻게 하는가?

 

 

Q30-1. transient란 무엇인가?

 

 

Q30-2. Entry<K,V>란 무엇인가?

 

Q30-3 Map.Entry<K,V>란 무엇인가?

 

 

Q31. Separate Chaining 방식을 사용하기 때문에, 

         Java 7에서의 put() 메서드 구현은 어떠한가?

 

 

- 참고
Q1~Q6 Do it 자바 프로그래밍 5/18

Q7~Q10 자바의 신 6/17

Q11~Q31 https://d2.naver.com/helloworld/831311 6/17
A1~A6 5/20