1. 문제
1. Hashset, Treeset은 Hashcode () 및 Equal () 메소드를 어떻게 사용합니까?
2. Treemap 및 Treeset의 객체는 언제 그리고 왜 비슷한 인터페이스를 구현합니까?
2. 답 :
1. Hashset은 Hashmap을 통해 구현되며 TreeSet은 Treemap을 통해 구현되지만 SET은 MAP 키 만 사용합니다.
2. 키와 맵 세트는 둘 다 일반적인 기능을 가지고 있으며, 이는 세트의 독창성입니다. Treemap에는 추가 주문이 있습니다.
3. 해시 코드 및 동등한 ()는 해시 맵에 사용됩니다. 분류 할 필요가 없기 때문에 포지셔닝과 독창성에주의를 기울이면됩니다.
A.HASHCODE는 해시 값을 계산하는 데 사용되며 해시 값은 해시 테이블 인덱스를 결정하는 데 사용됩니다.
비. 해시 테이블의 인덱스는 링크 된 목록을 저장하므로 키 값에 해당하는 항목을 진정으로 찾기 전에 체인의 각 객체를 비교하기 위해 동일한 방법을 반복해야합니다.
c.put시, 해시 테이블이 없으면 링크 된 목록 앞에 항목을 추가하십시오. 위치가 있으면 항목의 값을 교체하고 이전 값을 반환하십시오.
디. 키의 hashcode () 및 동등한 ()를 덮어 쓰면 변이 가능한 속성과 연관시키지 않도록주의하십시오. 그렇지 않으면 속성이 변경되면 해시 코드가 변경되고 동일하게는 거짓이되므로 맵에서 찾을 수 없습니다. 또한, 이러한 객체는 찾을 수 없기 때문에 해제 할 수 없으며, 이는 유효하지 않은 참조 (메모리 누출에 해당)가됩니다.
4. Treemap은 정렬이 필요하기 때문에 키 값의 크기를 비교하기 위해 비교기가 필요합니다. 물론 비교기를 사용하여 위치합니다.
A. Comparator는 Treemap을 만들 때 지정된 다음 정렬 할 때 Comparator.compare를 사용할 수 있습니다.
비. 생성 중에 비교기가 지정되지 않은 경우 key.compareto () 메소드가 사용되며, 이는 비교 가능한 인터페이스를 구현하려면 키가 필요합니다.
C.treemap은 트리 데이터 구조를 사용하여 구현되므로 비교 인터페이스를 사용하여 포지셔닝을 완료 할 수 있습니다.
import java.util.hashset; import java.util.iterator; public class wpsklhashset {// java에서 세트 사용 (중복 객체는 허용되지 않습니다) : 공개 정적 void main (string [] args) {해시 셋 해시 세트 = 새 해시 세트 (); string a = new String ( "a"); new String ( "b"); 문자열 ( "b"); hashset.add (a); hashset.add (b); system.out.println (hashset.size ()); String cz = hashset.add (c)? "이 객체가 존재하지 않는다": "이미 존재하지 않는다"; System.out.println ( "객체를 추가 할 수 있는지 테스트"+cz); system.out.println (hashset.isempty ()); // 객체가 이미 IT System.out.println ( "A")에 포함되어 있는지 테스트합니다. while (ir.hasnext ()) {system.out.println (ir.next ());} // 객체가 system.out.println (hashset.remove ( "a")); system.out.println (hashset.remove ( "a")) ir = hashset.iterator (); (ir.hasnext ()) {system.out.println (ir.next ());}}}/***이 프로그램을 통해 트리 세트의 추가 요소와 출력 순서의 장애를 테스트 할 수도 있습니다.*/import java.util.treeset; public class void void main (public class void main) {public class void void main (public class void). = new treeset (); tree.add ( "China"); tree.add ( "America"); tree.add ( "Japan"); tree.add ( "Chinese"); iterator iter = tree.iterator (); while (iter.hasnext ()) {system.out.println (iter.next ());}}}또한, 나는 다른 차이점을 켜고 있습니다 ( "Baidu가 알고있는 Andygulin 친구 덕분에) :
1. Treeset은 2 차례 트리에 의해 구현됩니다. TreeSet의 데이터가 자동으로 정렬되고 Null 값이 허용되지 않습니다.
2. 해시 세트는 해시 테이블에 의해 구현됩니다. 해시 세트의 데이터는 변하지 않습니다. 당신은 null을 넣을 수 있지만, 당신은 하나만 넣을 수 있습니다. 데이터베이스의 고유 한 제약 조건과 마찬가지로 둘 다의 값을 반복 할 수 없습니다.
3. Hashset은 배치 된 객체가 hashcode () 메소드를 구현해야합니다. 배치 된 객체는 해시 코드 코드로 표시되고 동일한 내용의 해시 코드 객체는 동일한 해시 코드를 가지므로 배치 된 내용을 반복 할 수 없습니다. 그러나 동일한 클래스의 객체는 다른 사례로 배치 될 수 있습니다.
요약
위는 해시 세트와 트리 셋의 사용 방법의 차이에 대한이 기사의 모든 내용이며, 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!