javaSE - 007 - 집합

3144 단어

컬렉션:

  • 집합에는 대상의 인용만 넣을 수 있고 원본 데이터 형식에 대해서는 자동으로 패키지를 뜯고 포장
  • 1. List 인터페이스의 2개 구현 클래스
  • ArrayList 실현 원리는 하나의 수조로 원본 코드를 열어 볼 수 있으며 내용은 추가된 대상의 인용
  • 이다.
  • LinkedList 실현 원리는 양방향 체인 테이블로 추가 대상은 진정한 추가 대상이 포장된 후(Entry 대상), 전치 인용과 후치 인용이 있다
  • 2.Map
  • HashMap

  • 3. Set(반복 불가, 순서 없는 집합)
  • HashSet은 Set 인터페이스를 실현하는 주요 유형으로 그 안에는 순서가 없다
  • TreeSet도 Set 인터페이스의 실현 클래스로 이 set은 정렬할 수 있다
  • hash code 및 equals


    순전히 억측에 속한다.다음과 같습니다.hash 코드는 메모리의 물리적 주소를 빨리 찾을 수 있습니다.서로 다른 대상은 같은hashcode가 있을 수 있지만 서로 다른hashcode는 반드시 다른 두 대상이다.두 번째에 따르면 equals를 비교할 수 있다. 먼저 같은hashcode가 있어야 한다.equals를 다시 쓰려면hashCode의 표현을 다시 써야 한다. 만약에 equals만 다시 쓰려면,hashcode를 다시 쓰지 않으면, 코끼리는 코끼리 더미와 비교하기만 하면 단락이 생기기 쉽다.
    
    public class test {
     public static void main(String[] args) {
      Sets = new HashSet();
    A a1= new A("liyang","26");
    A a2= new A("liyang","21");
    A a3= new A("liyang","22");
    A a4= new A("liyang","23");
    A a5= new A("liyang","26");
    s.add(a1);
    s.add(a2);
    s.add(a3);
    s.add(a4);
    s.add(a5);
    System.out.println(s);
    }
    }
    class A{
    String name ;
    String age;
    A(String name, String age){
    this.name = name;
    this.age = age;
    }
    @Override
    public int hashCode() {
    System.out.println(this.name + " hashcode " + this.age);
    return this .age.hashCode();
    }
    @Override
    public boolean equals(Object obj) {
    System.out.println(this.name + " equals " + this.age);
    A other = (A) obj;
    return other.name.equals(this.name);
    } 
    }
    결과 출력:
    liyang hashcode 26
    liyang hashcode 21
    liyang hashcode 22
    liyang hashcode 23
    liyang hashcode 26
    liyang equals 26
    다음은 System입니다.out.println(s);초래했어
    liyang hashcode 22
    liyang hashcode 23
    liyang hashcode 26
    liyang hashcode 21
    [javaSEtest.A@640, javaSEtest.A@641, javaSEtest.A@644, javaSEtest.A@63f]
    총괄: 원래 equals는'liyang'문자열로만 비교했고 완전히 같았지만 우리는hashcode로 나이가 생겨서 단락이 생겼다. equals 방법을 전혀 쓰지 않는다. 나이가 같은 것을 제외하고는.

    집합 교체

    Set s = **new** HashSet();
      s.add("liyang");
      s.add("liyang1");
      s.add("liyang2");
      s.add("liyang3");
      s.add("liyang4");
      
      Iterator i = s.iterator();
      while (i.hasNext()){
       System.out.println(i.next());
      }
     }
    

    Comparable 커넥터

    
    public class test {
     public static void main(String[] args) {
      Set s = new TreeSet();
      s.add(new Person(12));
      s.add(new Person(13));
      s.add(new Person(14));
      s.add(new Person(1));
      s.add(new Person(123));
      Iterator i = s.iterator();
      while (i.hasNext()) {
       System.out.println(i.next());
      }
     }
    }
    class Person implements Comparable {
     int score;
     Person(int score){
      this.score = score;
     }
     @Override
     public int compareTo(Object o) {
      Person p = (Person) o;
      if (this.score > p.score) {
       return 1;
      } else if (this.score == p.score) {
       return 0;
      } else {
       return -1;
      }
     }
     public String toString(){
      return ""+this.score;
     }
    }
    

    좋은 웹페이지 즐겨찾기