자바 인터페이스의 집합 (분리 수거)

설정 인터페이스 개요

Collection 인터페이스, 그 방법 및 Collection 인터페이스로부터 상속으로 동일한 java.util.Set을 java.util.List에 인터페이스 및 인터페이스는 기본적으로 동일하지 않으며, Collection 인터페이스보다 Collection 인터페이스 기능 확장하지만, 더 엄격한. 차이는 List 인터페이스로, Set 인터페이스 장애 요소 및 몇 가지 규칙이 요소로 비 중복을 보장하는 것입니다. 여러 하위 범주의 컬렉션을 설정, 여기에 우리는 java.util.HashSet 그들, java.util.LinkedHashSet 두 세트를 소개합니다. Set 인터페이스의 특성을 요약하면 :
  • java.util.Set을 인터페이스는 컬렉션 인터페이스를 확장
  • 스토리지 요소들을 반복하지 않는다
  • 인덱스는 더 밴드 인덱스 방법은 일반 루프 반복 사용되지 수 없습니다

 HashSet의 수집 소개

는 java.util.HashSet가 설정 인터페이스를 구현하고, 그 저장 요소는 반복되지 않고, (즉, 일관성 액세스 시퀀스) 요소 흐트러된다. 는 java.util.HashSet는 기본 사실은 java.util.HashMap에 지원입니다 얻을 수 있습니다. HashSet의 컬렉션 내의 객체 저장 위치의 해시 값에 기초하여 결정되며, 이것은 인접 검색 성능을 갖는다. 요소를 확인하는 유일한 방법은에 따라 다릅니다 해시 코드 및 방법 같습니다. HashSet의 수집의 특성을 요약하면 :
  • 는 java.util.HashSet 수집 구현 설정 인터페이스
  • 스토리지 요소들을 반복하지 않는다
  • 인덱스는 더 밴드 인덱스 방법은 일반 루프 반복 사용되지 수 없습니다
  • 일관성이 제거 될 수있다 요소들의 순서화를 수집하고 저장 요소들의 순서는
  • 바닥층은 해시 테이블 구조 (쿼리 속도가 매우 빠르고)

HashSet의 데이터를 저장하는 구조의 집합 (해시 테이블)

해시 값은 무엇인가?

  • 해시 값 : 랜덤 시스템 진수 정수 부여된다 (즉, 객체의 주소 값이 물리적 어드레스는 어드레스를 얻기 위해 시뮬레이션 논리 어드레스이며, 데이터가 실제로 저장되지 않는다).
해시 테이블은 무엇입니까?
  • JDK1.8, 연결리스트 구현 +를 사용하여 기본 해시 테이블 어레이, 즉 충돌 연결 목록에서 이전과 동일한 해쉬 값은 링크 된리스트에 저장된다. 그러나 경우에 키 값을 찾기 위해 요소 저효율의 해시 값보다 동일한 버킷 요소의 많은. 그리고, 사슬 길이가 임계치 (8)를 초과 JDK1.8 달성하기 위해 연결리스트 + + 레드 - 블랙 트리를 이용하여 해쉬 테이블 배열 메모리는, 상기리스트는 크게 검색 시간을 감소시키는 레드 - 블랙 트리로 변환된다. 간단히 말해, 해시 테이블 배열이 + + 레드 - 블랙 트리 (JDK1.8가 레드 - 블랙 트리 부분 증가) 실현 링크 된 목록입니다. 모두 모두, JDK1.8는 해시 코드를 결정하는, 사실, 그래서 우리를 위해, HashMap의 성능을 최적화하기 위해 레드 - 블랙 트리 유일한 보증을 큰 범위를 도입 요소의 HashSet의 수집의 목적에 따라 방법과 동일합니다. 우리가 컬렉션에 사용자 정의 개체를 저장하는 경우에만 보장, 그래서 개체 복제 해시 코드에 속하는 및 방법에 해당하는 현재의 방법을 확립하는 것이 필요하다.

설정 저장 데이터 세트의 고유성을 보장하는 방법

우리가 컬렉션에 사용자 정의 개체를 저장하는 경우에만 보장, 그래서 개체 복제 해시 코드에 속하는 및 방법에 해당하는 현재의 방법을 확립하는 것이 필요하다.

설정 저장 용 소자의 원리를 상세 :

우리는 컬렉션에 추가 방법 설정 수집 추가 요소를 사용하는 경우 :

  1. 추가의 방법은 요소의 해시 값이 추가되는 계산 요소를 추가 hashCode 메소드를 호출한다.
  2. 그런 다음 컬렉션에 갈 경우, 요소의 해시 값을 추가 할 수있다 찾기 위해 수집 방법에 추가 할 수 있습니다.
  3. 당신이 (해시 충돌을) 찾을 경우는 true를 돌려주는 경우, 전화의 요소는 방법과 해시 값의 같은 요소를 동일 추가해야합니다. 그런 다음 확인 된 두 가지 요소는 컬렉션 갔다 설정에 추가하지 않습니다, 동일합니다. 결과는 방법 반환 거짓 동일한 경우, 다음 컬렉션로 이동합니다.

코드 예

요구 사항 :  같은 사람으로 취급 그의 나이와 같은 이름으로, 한 번만 저장 될 수있다

Person 클래스의 정의

패키지 demo02HashSet을; 

수입 java.util.Objects; 

공용  클래스 사람 {
     개인 문자열 이름;
    개인  INT의 시대; 

    공공 사람 () { 
    } 

    공공 사람 (문자열 이름, INT 세) {
          .name을 = 이름;
         .age = 나이; 
    } 

    // 重写는方法에 해당 
    @Override
     공공  부울 등호 (객체 O) {
         경우 (  == O) 반환  사실은 ;
        만약(O ==  || getClass () = o.getClass는 ()!) 반환  거짓 ; 
        인 사람 = (사람) O;
        반환 나이 == 인 person.age && 
                Objects.equals (이름, person.name); 
    } 

    // 重写해시 코드 
    @Override
     공공  INT의 해시 코드 () { 

        반환 Objects.hash (이름, 나이); 
    } 

    @Override 
    공공 문자열 toString () {
         반환 "사람 {"+ 
                "이름 = '"+ 이름 +'\ ''+ 
                ", 연령 ="+ 나이 + 
                '}' ;

    공공 문자열 getName () {
         반환 이름; 
    } 

    공공  무효 에서는 setName (문자열 이름) {
          .name을 = 이름; 
    } 

    공공  INT getAge () {
         반환 시대; 
    } 

    공공  무효 setAge ( INT의 연령) {
          .age = 나이; 
    } 
}

Person 클래스 정의 세트는 HashSet에 저장됩니다

패키지 demo02HashSet; 

오기 는 java.util.HashSet와, 

공개  등급 Demo01HashSetPersonTest {
     공공  정적  무효 메인 (문자열 []에 args) {
         // HashSet의 그 사람 설정 기억 생성 
        HashSet의 <인격> SET = 새로운 새 HashSet의 <> (); 
        인격 P1 = 새로운 새로운 사람 ( "작은 미스 ', 18 ) 
        는 Person P2 = 새로운 새로운 인격 ("작은 미스', 18 ) 
        는 Person P3 = 새로운 새로운 인격 ( "작은 양", 19 );
         // 해시 값보기 
        에서 System.out.println (P1 .hashCode ());// 734 175 839 
        에서 System.out.println (p2.hashCode ()); // 734 175 839 

        에서 System.out.println (p1.equals (P2)); // true로 
        set.add (P1) 
        set.add (P2); 
        set.add (P3); 
        // 콜렉션 요소 확인 
        에서 System.out.println (설정); // [{인격 이름 = '작은 아름다움', 나이 = 19}, 사람 {이름 = ' 작은 아름다움', 세 = 18}] 
    } 
}

LinkedHashSet의 클래스

우리는 그 유일한 HashSet의 보증 요소를 알고 있지만 요소가 순서에 저장되어 있지 않은 경우, 우리는 질서를 보장하기 위해이 방법을 할까? java.util.LinkedHashSet 아래 HashSet의 서브 클래스에서, 데이터 저장 구조리스트와 함께 해시 테이블이다. 목록 이상 (저장 요소 기록 순서)를 정돈 요소를 확보

변수 매개 변수 소개

변수 매개 변수 : JDK1.5 이후에 발생하는 새로운 기능을 제공합니다. 우리는 복수의 파라미터를 수신하는 방법 및 파라미터의 동일한 유형의 다수를 정의 할 경우, 우리는 매개 변수를 사용할 수있다.

전제를 사용합니다 :

  • 프로세스 파라미터리스트 데이터 타입이 결정되었을 때, 그러나 불확실한 파라미터의 개수, 매개 변수가 사용될 수있다.

형식을 사용 :

수정 반환 형식 메소드 이름 (매개 변수 유형 이름 매개 변수 ...) {

               방법 체

}

사실,이 전체 쓰기에 해당

수정 반환형 메소드 이름 (파라미터 유형 [] 변수 명) {

         방법 체

}

변수 매개 변수의 원칙 :

  • 매개 변수를 기초하여 배열이다 전달 파라미터의 개수에 따라,이 매개 변수를 저장하기 위해 다양한 길이의 배열을 만든다. 파라미터의 개수에 전달하고, 0 (전송), 1,2- 복수 일 수있다 ..

변수 매개 변수를 노트

  • 메소드 파라미터리스트, 하나 개의 가변 파라미터
  • 방법의 여러 매개 변수가있는 경우, 변수 매개 변수는 매개 변수 목록의 마지막에 작성해야합니다
코드 예
package demo02HashSet;

public class ChangeArgs {
    public static void main(String[] args) {
        int[] arr = {1, 4, 62, 431, 2};
        int sum = getSum(arr);
        System.out.println(sum);//500

        // 求 这几个元素和 6 7 2 12 2121
        int sum2 = getSum(6, 7, 2, 12, 2121);
        System.out.println(sum2);//2148
    }

    /*
        * 完成数组 所有元素的求和 原始写法
        public static int getSum(int[] arr){
            int sum = 0;
            for(int a : arr){
                sum += a;
            }
            return sum;
        }
*/
    //可变参数写法
    public static int getSum(int... arr) {
        int sum = 0;
        for (int a : arr) {
            sum += a;
        }
        return sum;
    }

    //可变参数的特殊(终极)写法
    public static void method(Object... obj) {

    }
}

 

추천

출처www.cnblogs.com/wurengen/p/12024685.html