중복을 피하기 위해 Set에 어떤 알고리즘이 사용되는지 알고 싶습니까?
중복을 피하기 위해 사용되는 알고리즘의 이름은 무엇이며 가능한 경우 동일한 알고리즘 구현도 알고 싶습니다.중복을 피하기 위해 Set에 어떤 알고리즘이 사용됩니까?
답변
이것은 구현에 따라 다릅니다. Set은 클래스를 구현하는 메소드와 일반적인 동작을 정의하는 인터페이스 일뿐입니다. 이 클래스가 항목의 고유성을 보장하는 방법은이 클래스의 구현에 따라 다르며 상당히 다를 수 있습니다.
일부 구현은 이진 검색을 사용하여 기존 항목을 빠르게 찾기 위해 정렬 된 목록을 사용할 수 있습니다. 일부 다른 클래스는 바보 일 수 있으며 모든 항목을 반복하여 항목이 이미 있는지 여부를 찾습니다.
알고리즘은 여기에서 찾을 수 있습니다. https://homepages.inf.ed.ac.uk/wadler/gj/doc/java.util.Set.html#add(A)
지정된 요소를 아직 설정하지 않은 경우이 요소를이 집합에 추가합니다 (선택 사항). 지정된 요소 o가 요소 e를 가지지 않는 경우 (o == null e == null : o.equals (e))는, 정식 적으로, 지정된 요소 o를 세트에 추가합니다. Set에 이미 지정된 요소가 포함되어 있으면 호출은 Set을 변경하지 않고 false로 반환합니다. 생성자에 대한 제한과 결합하여 Sets에는 중복 요소가 포함되지 않습니다.
선택적인 부분은 이전 부분을 대체하지 않는다는 것입니다. "더 정식으로, (o == null? e == null : o.equals (e))와 같은 요소 e가 세트에 포함되어 있지 않으면 Set에 지정된 요소 o를 추가합니다." –
나는 앉아서 고마워요. –
HashSet 구현에는 데이터로 HashMap이 있습니다.
add (E e)가 map.put (e, DUMMY)을 호출한다는 것을 알 수 있습니다. HashMap 구현은 key uniquiness에 대해 obejct hashCode() 및 equals() 메소드를 사용하므로 return equals가 이전 것을 대체합니다. 이 세트의
구현은 여기에서 볼 수있다 : http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashSet.java
이 답변은 완전하지 않고 완전히 정확하지 않습니다. 해시 코드 뿐만이 아닙니다. 'hashCode()'와'equals()'를 봅니다. 해시 코드는 고유 키가 아니므로 다른 객체가 동일한 해시 코드를 가질 수 있습니다. – Jesper
- 1. 중복을 피하기 위해 localStorage
- 2. std :: search에는 어떤 알고리즘이 사용됩니까?
- 3. C# 식에 어떤 알고리즘이 사용됩니까?
- 4. .Net Machinekey.Protect - 어떤 알고리즘이 사용됩니까?
- 5. 이 코드에는 어떤 알고리즘이 사용됩니까?
- 6. 안드로이드에서 어떤 스케줄링 알고리즘이 사용됩니까?
- 7. 어떤 알고리즘이 python의 random.randint 함수에 사용됩니까?
- 8. Git 리베이스 중에 어떤 알고리즘이 사용됩니까?
- 9. 파스칼에서 Pos() 함수에 어떤 알고리즘이 사용됩니까?
- 10. DataView 정렬 방법 - 어떤 정렬 알고리즘이 사용됩니까?
- 11. 중복을 피하기 위해 요소의 크기를 조정하십시오.
- 12. XPath의 변수가 코드 중복을 피하기 위해 선택했습니다.
- 13. 어떤 알고리즘이 [NSString containString :]에서 ObjC의이 함수에 사용됩니까?
- 14. 어떤 정렬 알고리즘이 std :: list의 정렬 멤버 함수에 사용됩니까?
- 15. 어떤 알고리즘이 dji 팬텀 4 시각적 추적에 사용됩니까
- 16. 함수 date_sunrise, date_sunset 및 date_sun_info에 어떤 알고리즘이 사용됩니까?
- 17. Grails의 application.groovy를 실행하기 위해 어떤 classspath가 사용됩니까
- 18. 비니잉을 위해 SPCImage에서 어떤 종류의 필터링이 사용됩니까?
- 19. 미래 응답을 예측하기 위해 어떤 가중치가 사용됩니까?
- 20. 테스트 데이터 정의에서 중복을 피하기 위해 테스트를 상속해야합니까?
- 21. Clojure, Haskell (및 다른 언어)에서 STM을 위해 어떤 알고리즘이 사용됩니까?
- 22. createScaledBitmap의 작동 방식은 무엇입니까? 스케일 이미지를 생성하기 위해 어떤 크기 조정 알고리즘이 사용됩니까?
- 23. 중복을 피하기 위해 다른 Eclipse 프로젝트간에 자원을 공유하려면 어떻게해야합니까?
- 24. MySQL 삽입이 양방향 중복을 피하기 위해 null 인 경우 삽입
- 25. ASP MVC 5 코드 중복을 피하기 위해 프로젝트 구성
- 26. 중복을 피하기 위해 콘텐츠를 업데이트하는 속도 제한 AJAX 요청
- 27. 코드 중복을 피하기 위해 매개 변수 유효성 검사를 수행해야하는 위치
- 28. 데이터베이스에서 중복을 피하기 위해 PHP를 사용하는 방법은 무엇입니까?
- 29. 중복을 피하기 위해 JFreeChart의 일부 카테고리 라벨을 숨기기
- 30. Kendo UI 위젯이 DOM 객체에 적용되었습니다 (중복을 피하기 위해)
내가'Set' 서브 클래스의 코드에서 –
그냥 다이빙은 ... 당신이 거기에 논리를 찾을 말을 무슨 'Set' 구현에 따라 달라집니다. – AxelH
한 걸음 뒤로 물러서 인터페이스와 클래스의 차이점을 알아 내고 [documentation] (https://docs.oracle.com/javase/8/docs/api/java/util)로 넘어가십시오. /Set.html) (필요한 모든 정보가 거기에 있기 때문에). – Dukeling