CodeGym/Java Blog/무작위의/인터페이스로서의 Java 세트
John Squirrels
레벨 41
San Francisco

인터페이스로서의 Java 세트

무작위의 그룹에 게시되었습니다
회원
집합은 단순히 고유한 개체의 모음입니다. 고유함은 두 개체가 동일한 값을 가질 수 없음을 의미합니다. 세트의 구현에 따라 주문할 수도 있고 주문하지 않을 수도 있습니다. ADT(Abstract Data Type)로서의 Java 세트에는 몇 가지 주요 작업이 있습니다(여기서 T는 int, String 또는 모든 클래스 개체와 같은 모든 데이터 유형을 나타냄). 인터페이스로서의 Java 세트 - 1
  • boolean add(T item): 항목이 집합에 성공적으로 추가되면 true를 반환하고 항목이 이미 집합에 있으면 false를 반환합니다.
  • boolean remove(T item): 항목이 집합에서 성공적으로 제거되면 true를 반환하고 그렇지 않으면 false를 반환합니다(항목이 집합에 없는 경우).
  • boolean contains(T item): 항목이 집합에 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
  • boolean isEmpty(): 집합이 비어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
Java의 집합에는 설명이 필요 없는 꽤 자명한 함수 서명이 있습니다. 두 개의 동일한 항목을 세트에 추가하면 첫 번째로 추가된 항목만 세트에 포함됩니다. 동일한 항목을 추가하려는 모든 후속 시도는 항목을 먼저 제거하지 않는 한 무시됩니다. 가장 일반적으로 사용되는 집합 작업 중 하나는 항목이 주어진 집합 내에 있는지 확인하는 것입니다. 이 함수는 이에 대한 훌륭한 런타임을 제공합니다. 사용된 구현이 a 인지 a contains()인지에 따라 O(1) 또는 O(log n) 시간 복잡도HashSetTreeSet, 각각. 그렇다면 세트는 무엇을 위해 사용될 수 있습니까? 음, ID, 이름 또는 기타 고유 식별자와 같은 많은 개별 개체를 추적해야 하고 이러한 컬렉션에 항목이 있는지 자주 확인해야 하는 경우 집합이 좋은 선택일 수 있습니다. Student다음은 집합의 사용 사례 예입니다. 주어진 수업의 모든 학생을 나타내는 개체 목록이 있다고 가정합니다 . 각각은 Student이 클래스에 대해 고유한 이름(문자열) 및 등급(int)을 가질 수 있습니다. 모든 A 학생(등급 >=90)의 목록을 자주 참조하려는 경우 이 목록을 반복하고 매번 모든 학생의 등급을 확인하는 것은 지루할 것입니다. HashSet대신 다음 과 같이 클래스의 모든 A 학생을 추적하는 문자열을 사용할 수 있습니다 .
  • 학생의 성적이 업데이트될 때마다 학생의 새로운 성적이 90 이상인지 아닌지 간단히 확인할 수 있습니다.
    • 그렇다면 다음을 사용하여 A 학생 세트에 추가하십시오.add()
      • 이미 A 학생인 경우 이 작업은 무시됩니다.
    • 그렇지 않은 경우 다음을 사용하여 A 학생 세트에서 제거하십시오.remove()
      • 이 시점에서 그들이 A 학생이 아니었다면 이 작업은 단순히 무시됩니다.
이러한 시스템을 사용하면 수업에 항상 최신의 모든 'A' 학생 집합이 있게 됩니다. Johnny Appleseed가 수업에서 잘하고 있는지 확인하고 싶다면 contains(“Johnny Appleseed”)세트장에 전화를 걸어 쉽게 확인할 수 있습니다. 물론 이것은 집합에 대한 사용 사례의 한 예일 뿐이며 A 학생을 추적하는 특정 문제는 다른 방법으로 해결할 수 있습니다.

구현: Java의 HashSet 및 Java TreeSet 예제

HashSetin Java와 TreeSetin Java는 모두 java.utils package. 다음과 같이 가져올 수 있습니다.
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
또는
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
Java HashSet와 Java 의 주요 차이점은 정렬되는 반면 정렬되지 않는다는 TreeSet것입니다 . 이것이 주요 작업에 대해 O(log n) 시간 복잡도를 갖는 반면 O(1) 또는 일정한 시간 복잡도를 갖는 이유입니다. 항상 질서를 유지해야 합니다 . 앞에서 언급한 키 설정 작업 외에도 Java의 및 에는 다음과 같은 몇 가지 유용한 기능이 있습니다. TreeSetHashSetTreeSetHashSetTreeSetHashSetTreeSet
  • void clear(): 모든 개체 집합을 지웁니다.
  • int size(): 집합의 개체 수를 반환합니다.
  • Object clone(): 집합의 단순 복사본을 반환합니다.
  • Iterator iterator(): 첫 번째 개체에서 시작하여 집합에 대한 반복자를 반환합니다.
"A 학생 목록" 예에서 이러한 기능의 용도를 찾는 것을 상상할 수 있습니다. size()'A' 학생이 몇 명인지 확인하고 싶거나 clear()학기 말에 목록을 지우고 싶다면 전화를 걸 수 있습니다. clone()중간 보고서와 같은 특정 시점에 A 학생 목록의 복제본을 만들고 유지하는 데 사용할 수 있습니다(이렇게 하면 복제본이 원본과 함께 최신 상태로 유지되지 않음) .

자바 해시셋 예제

다음은 Java에서 사용되는 a HashSetof s 의 간단한 예입니다 .String
import java.util.HashSet;
class HashSetDemo {
    public static void main(String[] args)
    {
	  // create a HashSet of Strings
        HashSet<String> hs = new HashSet<String>();

        // Add elements using the add() method
        hs.add("Collin");
	  hs.add("Bob");
 	  hs.add("Abigail");

        // Duplicates will ignored; this statement is useless
        hs.add("Collin");


        System.out.println(hs);
	  System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
  System.out.println("Max is in the set (T/F): " + hs.contains("Max"));


    }
}
출력: --------
[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false

자바 트리셋 예제

Java 세트 예제는 이론을 이해하는 데 도움이 될 수 있습니다. 다음은 Java에서 사용되는 a TreeSetof s 의 간단한 예입니다 .String
import java.util.TreeSet;
class TreeSetDemo {
    public static void main(String[] args)
    {
	  // create a TreeSet of Strings
        TreeSet<String> ts = new TreeSet<String>();

        // Add elements using the add() method.
        ts.add("Collin");
	  ts.add("Bob");
 	  ts.add("Abigail");

        // Duplicates will ignored; this statement is useless
        ts.add("Collin");

        // printing the set prints the names in alphabetical order!
        System.out.println(ts);

	  System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
  System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
  System.out.println("Size of the set: " + ts.size());
 	  ts.clear();
	  System.out.println("Size of the set after clear(): " + ts.size());


    }
}
출력: -------
[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
그게 다야! 이것이 도움이 되었기를 바랍니다 😊
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다