2017-11-17 1 views
-2

중복을 피하기 위해 Set에 어떤 알고리즘이 사용되는지 알고 싶습니까?
중복을 피하기 위해 사용되는 알고리즘의 이름은 무엇이며 가능한 경우 동일한 알고리즘 구현도 알고 싶습니다.중복을 피하기 위해 Set에 어떤 알고리즘이 사용됩니까?

+6

내가'Set' 서브 클래스의 코드에서 –

+0

그냥 다이빙은 ... 당신이 거기에 논리를 찾을 말을 무슨 'Set' 구현에 따라 달라집니다. – AxelH

+0

한 걸음 뒤로 물러서 인터페이스와 클래스의 차이점을 알아 내고 [documentation] (https://docs.oracle.com/javase/8/docs/api/java/util)로 넘어가십시오. /Set.html) (필요한 모든 정보가 거기에 있기 때문에). – Dukeling

답변

0

이것은 구현에 따라 다릅니다. Set은 클래스를 구현하는 메소드와 일반적인 동작을 정의하는 인터페이스 일뿐입니다. 이 클래스가 항목의 고유성을 보장하는 방법은이 클래스의 구현에 따라 다르며 상당히 다를 수 있습니다.

일부 구현은 이진 검색을 사용하여 기존 항목을 빠르게 찾기 위해 정렬 된 목록을 사용할 수 있습니다. 일부 다른 클래스는 바보 일 수 있으며 모든 항목을 반복하여 항목이 이미 있는지 여부를 찾습니다.

1

알고리즘은 여기에서 찾을 수 있습니다. 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에는 중복 요소가 포함되지 않습니다.

+0

선택적인 부분은 이전 부분을 대체하지 않는다는 것입니다. "더 정식으로, (o == null? e == null : o.equals (e))와 같은 요소 e가 세트에 포함되어 있지 않으면 Set에 지정된 요소 o를 추가합니다." –

+0

나는 앉아서 고마워요. –

0

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

+0

이 답변은 완전하지 않고 완전히 정확하지 않습니다. 해시 코드 뿐만이 아닙니다. 'hashCode()'와'equals()'를 봅니다. 해시 코드는 고유 키가 아니므로 다른 객체가 동일한 해시 코드를 가질 수 있습니다. – Jesper

관련 문제