TreeSet의 장점과 단점이 무엇인지 궁금한 점이 있으시면 언제든지 알려주십시오. 감사!TreeSet의 장단점은 무엇입니까
답변
Collection 클래스 중 하나입니다. 키를 사용하여 컬렉션의 요소에 액세스하거나 키순으로 순차적으로 액세스 할 수 있습니다. ArrayList 또는 HashMap보다 오버 헤드가 상당히 많습니다. 순차적 액세스가 필요하지 않을 때 HashSet을 사용하고 키로 조회하면됩니다. ArrayList를 사용하고 배열을 사용하십시오. 순서대로 요소를 원하면 정렬하십시오. TreeSet는 항상 요소를 순서대로 유지합니다. ArrayList를 사용하면 필요할 때 정렬 할 수 있습니다. TreeSets를 사용하면 컬렉션에 저장하는 객체에 키가 포함되어야합니다. 종종 TreeSet of Strings가있을 수 있습니다. 당신이 할 수있는 것은 주어진 String이 Set에 있는지를 알려주는 것입니다. 그것은 당신에게 그가 Treemap과 같은 방식으로 연관된 객체를 찾지 않을 것입니다. TreeMap을 사용하면 (자), 관련 지을 수 있었던 키와 오브젝트가 분리됩니다.
TreeSet과 그 형 TreeMap은 이상하게도 나무를 나타내는 것과 관련이 없습니다. 내부적으로는 트리 구조를 사용하여 알파벳 순으로 정렬 된 Set/Map을 제공하지만 부모와 자식 간의 연결을 제어 할 수는 없습니다.
내부적으로 TreeSet은 빨강 - 검정 나무를 사용합니다. 잘 균형 잡힌 트리를 얻기 위해 데이터를 미리 정렬 할 필요가 없습니다. 반면에 데이터가 정렬되면 (오름차순 또는 내림차순), 트리의 다른 유형과 마찬가지로 해를 끼치 지 않습니다.
원하는 순서를 정의하기 위해 Comparator를 제공하지 않으면 TreeSet은 자연 순서를 정의하기 위해 항목 클래스에서 Comparable 구현을 필요로합니다.
입니다. 일반적인 사용 사례 : 텍스트를 가져 와서이 텍스트의 모든 단어를 TreeSet
"순차적 액세스가 필요하지 않을 때 HashSet을 사용하고 키로 조회 만하면됩니다."- 키로 조회를하지 않아도됩니다. –
특정 순차 액세스가 필요하지만 정렬이 필요하지 않은 경우 입력 데이터의 순서를 유지하는 LinkedHashSet을 사용할 수 있습니다. 또한 TreeSet은 logn의 순서를 제거합니다. PriorityQueue 제거 순서는 O (n) –
TreeSet :
장점 : 빨강/검정 트리 알고리즘을 기반으로 정렬되어 작업에 O (log (N)) 복잡도를 제공합니다.
단점 : 값은 이어야합니다.이거나 비교 자을 생성자에 제공해야합니다. 또한 HashSet 구현은 ~ O (1) 복잡성을 제공하므로 성능이 향상됩니다.
감사합니다. – Rifk
"red/black tree 알고리즘을 기반으로하는"metion을 "pro"로 이상하게 보입니다. 또한 TreeSet을 비교하는 명백한 일이 (당신이 말했듯이) 더 나은 시간 복잡성을 가진 HashSet 일 때 O (log (N)) 복잡성을 프로로 언급하는 것이 좀 이상합니다. –
@Laurence : 1) 유일성 검사를 포함하면 목록에 삽입하면 O (log (N))가 해당 프로와 관련이 있습니다. 2) 괜찮은 해시 함수를 사용하고 해시 테이블이 커질 수 있도록 허용하는 경우 HashSet은 O (1)입니다. –
이 데이터 구조는 오름차순 검색이 가능하도록 데이터를 유지 관리하는 데 이진 트리를 사용한다고 생각합니다. 이 경우 트리를 균형있게 유지하려고하면 제거 작업이 약간 비용이 많이들 것입니다.
-1 : HashSet은 빨강 - 검정 트리를 사용합니다. [이 페이지] (http://www.eli.sdsu.edu/courses/fall95/cs660/notes/RedBlackTree/RedBlack.html)에 따르면 삭제의 복잡성은 O (log (N)) –
단점 : TreeSet의 함정 중 하나는 예상치 못한 방식으로 Set 인터페이스를 구현한다는 것입니다. TreeSet가 객체 a를 보관 유지하고있는 경우, a.equals (b)가 false 인 경우에서도, a.compareTo (b)가 0을 돌려 주면, 객체 b는 세트의 일부라고 보여져 compareTo와 equals가 일관성있게 구현되어 있지 않은 경우 너는 나쁜 태도를 취하고있다.
이 메서드는 메서드가 Set를 반환하고 구현이 TreeSet 또는 예를 들어 HashSet인지 여부를 알 수없는 경우 특히 문제가됩니다.
여기서 배우는 교훈은 항상 compareTo와 equals를 일관되게 구현하지 않는 것입니다. equals와 일치하지 않는 방식으로 객체를 정렬해야하는 경우 Comparator를 사용하십시오.
을 사용할 의무가 없습니다. "a.compareTo (b)가 0을 반환하면"라고 말하고 싶지 않을 수 있습니다. –
와우. 4 년 된 포스트에 대한 건설적인 피드백. 고마워, 나는 그것을 고쳤다. – Buhb
TreeSet은 메모리를 조각 내고 추가 메모리 오버 헤드가 있습니다. 소스를보고 추가 메모리의 양과 생성 된 추가 오브젝트의 양을 계산할 수 있습니다. 물론 저장된 객체의 특성에 따라 달라지며 메모리에 대한 편집증이 될 수도 있습니다.하지만 여기저기서 낭비하지 않는 것이 좋습니다. GC가 있고 캐시 미스가 있으며이 모든 것들이 슬 루입니다.
자주 TreeSet 대신 PriorityQueue를 사용할 수 있습니다. 그리고 일반적인 사용법에서는 문자열 배열을 정렬하는 것이 좋습니다.
- 1. 문제 TreeSet의
- 2. Java : TreeSet의 문제점
- 3. ICU의 장단점은 무엇입니까?
- 4. CTE 사용의 장단점은 무엇입니까?
- 5. CSS 변수의 장단점은 무엇입니까?
- 6. GroovyClassLoader와 GroovyShell의 장단점은 무엇입니까
- 7. PHPDesigner와 PhpStorm의 장단점은 무엇입니까?
- 8. Liftweb Comet의 장단점은 무엇입니까?
- 9. OpenID를 사용할 때의 장단점은 무엇입니까?
- 10. CoreAudio에서 kAudioDevicePropertyBufferFrameSize 설정의 장단점은 무엇입니까?
- 11. Ruby에서 동적 유형의 장단점은 무엇입니까?
- 12. git submodule과 Repo의 장단점은 무엇입니까?
- 13. IOC 컨테이너를 사용하기위한 장단점은 무엇입니까?
- 14. LinkedHashMaps 대 LinkedHashSets의 장단점은 무엇입니까?
- 15. Icon 프로그래밍 언어의 장단점은 무엇입니까?
- 16. Google에서 jQuery를 호스트하도록 장단점은 무엇입니까?
- 17. 이러한 종류의 플러그인의 장단점은 무엇입니까?
- 18. 확장 성 디자인 패턴은 무엇이며 장단점은 무엇입니까?
- 19. 우리 양식에서 javascript를 사용하는 장단점은 무엇입니까?
- 20. 정적 클래스 vs. Singelton - 각각의 장단점은 무엇입니까?
- 21. IDE에서 실시간 공동 작업의 장단점은 무엇입니까?
- 22. C#의 정적 클래스, 장단점은 무엇입니까?
- 23. MSI 및 MSP 사용의 장단점은 무엇입니까?
- 24. HTML5 Canvas와 SVG + Raphael.js의 장단점은 무엇입니까?
- 25. 웹 사이트 성능 관점에서 DTO의 장단점은 무엇입니까?
- 26. newid() vs newsequentialid() 차이점/장단점은 무엇입니까?
- 27. 이러한 서로 다른 dealloc 전략의 장단점은 무엇입니까?
- 28. 중첩 템플릿과 새로운 인터페이스의 장단점은 무엇입니까?
- 29. node.js의 fs.createReadStream 대 fs.readFile의 장단점은 무엇입니까?
- 30. Enterprise Library의 Msmqdistributor 서비스에 대한 장단점은 무엇입니까?
이러한 질문과 그에 대한 대답은 거기에 있어야합니다. 매우 도움이된다! 고맙습니다! – mtical