집합은 단순히 고유한 개체의 모음입니다. 고유함은 두 개체가 동일한 값을 가질 수 없음을 의미합니다. 세트의 구현에 따라 주문할 수도 있고 주문하지 않을 수도 있습니다. ADT(Abstract Data Type)로서의 Java 세트에는 몇 가지 주요 작업이 있습니다(여기서 T는 int, String 또는 모든 클래스 개체와 같은 모든 데이터 유형을 나타냄).
boolean add(T item)
: 항목이 집합에 성공적으로 추가되면 true를 반환하고 항목이 이미 집합에 있으면 false를 반환합니다.boolean remove(T item)
: 항목이 집합에서 성공적으로 제거되면 true를 반환하고 그렇지 않으면 false를 반환합니다(항목이 집합에 없는 경우).boolean contains(T item)
: 항목이 집합에 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.boolean isEmpty()
: 집합이 비어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.
contains()
인지에 따라 O(1) 또는 O(log n) 시간 복잡도HashSet
TreeSet
, 각각. 그렇다면 세트는 무엇을 위해 사용될 수 있습니까? 음, ID, 이름 또는 기타 고유 식별자와 같은 많은 개별 개체를 추적해야 하고 이러한 컬렉션에 항목이 있는지 자주 확인해야 하는 경우 집합이 좋은 선택일 수 있습니다. Student
다음은 집합의 사용 사례 예입니다. 주어진 수업의 모든 학생을 나타내는 개체 목록이 있다고 가정합니다 . 각각은 Student
이 클래스에 대해 고유한 이름(문자열) 및 등급(int)을 가질 수 있습니다. 모든 A 학생(등급 >=90)의 목록을 자주 참조하려는 경우 이 목록을 반복하고 매번 모든 학생의 등급을 확인하는 것은 지루할 것입니다. HashSet
대신 다음 과 같이 클래스의 모든 A 학생을 추적하는 문자열을 사용할 수 있습니다 .
- 학생의 성적이 업데이트될 때마다 학생의 새로운 성적이 90 이상인지 아닌지 간단히 확인할 수 있습니다.
- 그렇다면 다음을 사용하여 A 학생 세트에 추가하십시오.
add()
- 이미 A 학생인 경우 이 작업은 무시됩니다.
- 그렇지 않은 경우 다음을 사용하여 A 학생 세트에서 제거하십시오.
remove()
- 이 시점에서 그들이 A 학생이 아니었다면 이 작업은 단순히 무시됩니다.
- 그렇다면 다음을 사용하여 A 학생 세트에 추가하십시오.
contains(“Johnny Appleseed”)
세트장에 전화를 걸어 쉽게 확인할 수 있습니다. 물론 이것은 집합에 대한 사용 사례의 한 예일 뿐이며 A 학생을 추적하는 특정 문제는 다른 방법으로 해결할 수 있습니다.
구현: Java의 HashSet 및 Java TreeSet 예제
HashSet
in Java와 TreeSet
in 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의 및 에는 다음과 같은 몇 가지 유용한 기능이 있습니다. TreeSet
HashSet
TreeSet
HashSet
TreeSet
HashSet
TreeSet
void clear()
: 모든 개체 집합을 지웁니다.int size()
: 집합의 개체 수를 반환합니다.Object clone()
: 집합의 단순 복사본을 반환합니다.Iterator iterator()
: 첫 번째 개체에서 시작하여 집합에 대한 반복자를 반환합니다.
size()
'A' 학생이 몇 명인지 확인하고 싶거나 clear()
학기 말에 목록을 지우고 싶다면 전화를 걸 수 있습니다. clone()
중간 보고서와 같은 특정 시점에 A 학생 목록의 복제본을 만들고 유지하는 데 사용할 수 있습니다(이렇게 하면 복제본이 원본과 함께 최신 상태로 유지되지 않음) .
자바 해시셋 예제
다음은 Java에서 사용되는 aHashSet
of 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에서 사용되는 aTreeSet
of 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
그게 다야! 이것이 도움이 되었기를 바랍니다 😊
GO TO FULL VERSION