ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Set
    Java/Data-Structure 2019. 8. 1. 21:37

    ■Set 인터페이스


    - 중복을 허용하지 않음


    - 구현 클래스 : HashSet, TreeSet, LinkedHashSet


    - 동기화를 지원하지 않는다.(Not Thread Safe)



    ■HashSet 클래스


    - 내부 구현 : HashMap


    - 순서 없이 데이터 저장


    - HashSet.add 과정

    HashMap.put(data,new Objtect)


    - HashSet.remove 과정

    HashMap.remove(data)


    - 데이터를 HashMap의 key를 이용해 저장하기 때문에 검색 속도가 빠르다


    - 제네릭을 이용하여 HashSet을 사용할 경우, HashMap의 key 중복 검사에 해당 제네릭 

    클래스의 hashCode()와 equals()가 사용됨. 따라서 각 메소드들을 적절하게 재정의하는 

    것이 좋다.


    - 동기화를 지원하지 않기 때문에 때에 따라 

    명시적 동기화(Collections.synchronizedSet)가 필요하다. (Not Thread Safe)




    ■TreeSet 클래스


    - 내부 구현 : NavigableMap 

    (BinarySearchTree에서 성능이 향상된 RedBlackTree의 형태)


    - 오름차순하여 데이터 저장 

    (descendingSet() 메소드를 사용해 내림차순하여 사용할 수도 있음)


    - TreeSet.add 과정

    NavigableMap.put(data,new Objtect)


    - TreeSet.remove 과정

    NavigableMap.put(data)


    - 데이터 추가, 삭제에는 시간이 좀 걸리지만 검색하는 시간이 적게들고 

    정렬된 Set을 이용할 수 있다. (HashSet보다는 검색 시간이 느림) (?)


    - 동기화를 지원하지 않기 때문에 때에 따라 

    명시적 동기화(Collections.synchronizedSet)가 필요하다. (Not Thread Safe)



    ■LinkedHashSet(extends HashSet) 클래스


    - 내부 구현 : LinkedHashMap 

    (HashSet의 생성자 중 LinkedHashMap을 생성하는 생성자만을 사용)


    - 입력된 순서대로 정렬


    - LinkedHashSet.add 과정

    LinkedHashMap.put()


    - LinkedHashSet.remove 과정

    LinkedHashMap.remove()


    - 데이터를 Linked 형식으로 저장하기 때문에 HashSet보다 성능이 약간 후지다고 함

    (?확인필요?)


    - 동기화를 지원하지 않기 때문에 때에 따라 

    명시적 동기화(Collections.synchronizedSet)가 필요하다. (Not Thread Safe)




    'Java > Data-Structure' 카테고리의 다른 글

    List  (0) 2019.08.01

    댓글

Designed by Tistory.