>  기사  >  Java  >  Java Set 컬렉션 탐색 및 구현 클래스 비교(코드 포함)

Java Set 컬렉션 탐색 및 구현 클래스 비교(코드 포함)

黄舟
黄舟원래의
2017-03-30 10:24:491547검색

이 글은 주로 Java Set 순회 및 구현 클래스 비교 관련 정보를 소개합니다. 필요한 친구는

Java Set 순회 및 구현 클래스 비교

Java의 Set 컬렉션은 반복되는 요소를 포함하지 않는 컬렉션입니다. 먼저 순회 방법을 살펴보겠습니다.

package com.sort; 
 
import java.util.HashSet; 
import java.util.Iterator; 
import java.util.Set; 
 
/** 
 * 一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2, 
 * @author Owner 
 * 
 */ 
public class SetTest2 { 
 
  public static void main(String[] args) { 
    Set<String> set = new HashSet<String>(); 
     
    set.add("a"); 
    set.add("b"); 
    set.add("c"); 
    set.add("d"); 
    set.add("e"); 
     
    set.add("e");//不能放入重复数据 
     
    /** 
     * 遍历方法一,迭代遍历 
     */ 
    for(Iterator<String> iterator = set.iterator();iterator.hasNext();){ 
      System.out.print(iterator.next()+" "); 
    } 
     
    System.out.println(); 
    System.out.println("********************"); 
     
    /** 
     * for增强循环遍历 
     */ 
    for(String value : set){ 
      System.out.print(value+" "); 
    } 
  } 
}

참고: 여기서 Set 컬렉션에 들어가는 것은 문자열입니다. type,

Person 클래스 인스턴스와 같은 자체 정의된 클래스 인스턴스를 넣으면 해시 코드와 같음 메서드를 직접 다시 작성해야 합니다. 자체 키 필드로 다시 작성해야 합니다. , hashCode() 메소드가 호출되어 이미 세트에 저장된 객체 의 해시 코드 값이 추가된 객체의 해시 코드 값과 일치하는지 확인합니다. 그렇지 않으면 직접 추가합니다. 일관성이 있으면 equals 메소드를 비교하십시오. equals 메소드가 true를 반환하면 객체가 추가되었으며 새 객체가 추가되지 않음을 의미합니다. 그렇지 않으면 객체가 추가됩니다.

Set 컬렉션의 또 다른 중요한 구현 클래스인 TreeSet을 분석해 보겠습니다.

TreeSet은 요소의

자연 순서를 사용하여 요소를 정렬합니다. . 또는 사용된 생성자에 따라 세트가 생성될 때 제공된 비교기에 따라 정렬됩니다.

간단히 말하면 정렬된

목록에 따라 을 표시하거나 지정된 규칙에 따라

Set<String> set = new TreeSet<String>(); 
     
    set.add("f"); 
    set.add("a"); 
    set.add("b"); 
    set.add("c"); 
    set.add("d"); 
    set.add("e"); 
     
    System.out.println(set);

를 정렬할 수 있습니다. , b, c , d, e, f]


을 정렬한 후 출력됩니다. 그러면 역순으로 출력하려면 어떻게 해야 할까요? 물론 방법은 다양합니다. 여기서는

package com.sort; 
 
import java.util.Comparator; 
import java.util.Iterator; 
import java.util.Set; 
import java.util.TreeSet; 
 
public class TreeSetTest3 { 
 
  public static void main(String[] args) { 
    Set<String> set = new TreeSet<String>(new MyComparator()); 
     
    set.add("a"); 
    set.add("b"); 
    set.add("c"); 
    set.add("d"); 
    set.add("e"); 
    set.add("A"); 
     
    for(Iterator<String> iterator = set.iterator();iterator.hasNext();){ 
      System.out.print(iterator.next()+" "); 
    } 
  } 
} 
 
class MyComparator implements Comparator<String>{ 
 
  @Override 
  public int compare(String o1, String o2) { 
     
    return o2.compareTo(o1);//降序排列 
  }

를 역순으로 출력하도록 규칙을 지정합니다. e d c b a A

Set 컬렉션이 우리가 정의한 클래스 유형을 넣으면 어떻게 될까요?

참고: 위의 방법과 유사하게 Comparator인터페이스를 구현하는 정렬 규칙 클래스를 정의해야 합니다

package com.sort; 
 
import java.util.Comparator; 
import java.util.Iterator; 
import java.util.Set; 
import java.util.TreeSet; 
 
public class TreeSetTest2 { 
 
  public static void main(String[] args) { 
    Set<Person> set = new TreeSet<Person>(new PersonComparator()); 
     
    Person p1 = new Person(10); 
    Person p2 = new Person(20); 
    Person p3 = new Person(30); 
    Person p4 = new Person(40); 
     
    set.add(p1); 
    set.add(p2); 
    set.add(p3); 
    set.add(p4); 
     
    for(Iterator<Person> iterator = set.iterator();iterator.hasNext();){ 
      System.out.print(iterator.next().score+" "); 
    } 
  } 
} 
 
class Person{ 
  int score; 
   
  public Person(int score){ 
    this.score = score; 
  } 
   
  public String toString(){ 
    return String.valueOf(this.score); 
  } 
} 
 
class PersonComparator implements Comparator<Person>{ 
 
  @Override 
  public int compare(Person o1, Person o2) { 
     
    return o1.score - o2.score; 
  } 
   
}

출력: 10 20 30 40

개인 점수의 역순으로 정렬할 경우 비교 방법에서 o2.score-o1.score

만 변경하면 됩니다.

위 내용은 Java Set 컬렉션 탐색 및 구현 클래스 비교(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.