른록노트
[DataStructure] Set (Java) 본문
1. Set
Java11
Module java.base
Package java.util
Interface Set<E>
Type Parameters:
E - the type of elements maintained by this set
All Superinterfaces:
Collection<E>, Iterable<E>
All Known Subinterfaces:
EventSet, NavigableSet<E>, SortedSet<E>
All Known Implementing Classes:
AbstractSet, ConcurrentHashMap.KeySetView, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet
public interface Set<E>
extends Collection<E>
중복 요소가 없는 컬렉션입니다. 더 공식적으로, 세트에는 e1.equals(e2)와 같은 요소 e1 및 e2 쌍이 없고 최대 하나의 null 요소가 포함됩니다. 이름에서 알 수 있듯이 이 인터페이스는 수학적 집합 추상화를 모델링합니다.
Set 인터페이스는 Collection 인터페이스에서 상속된 것 외에 모든 생성자의 계약과 add, equals 및 hashCode 메서드의 계약에 대한 추가 규정을 적용합니다. 편의를 위해 다른 상속된 메서드에 대한 선언도 여기에 포함됩니다. (이 선언에 수반되는 사양은 Set 인터페이스에 맞게 조정되었지만 추가 조건은 포함하지 않습니다.)
생성자에 대한 추가 규정은 당연히 모든 생성자가 중복 요소를 포함하지 않는 set을 생성해야 한다는 것입니다(위에 정의됨).
참고: 가변 개체를 set 요소로 사용하는 경우 각별히 주의해야 합니다. 개체가 set의 요소인 동안 equals 비교에 영향을 주는 방식으로 개체의 값이 변경된 경우 set의 동작이 지정되지 않습니다. 이 금지의 특별한 경우는 set이 자신을 요소로 포함하는 것이 허용되지 않는다는 것입니다.
일부 set 구현에는 포함할 수 있는 요소에 대한 제한이 있습니다.예를 들어, 일부 구현에서는 null 요소를 금지하고 일부 구현에서는 해당 요소의 type에 제한이 있습니다. 부적격 요소를 추가하려고 하면 확인되지 않은 예외(일반적으로 NullPointerException 또는 ClassCastException)가 발생합니다. 부적격 요소의 존재를 쿼리하려고 하면 예외가 발생하거나 단순히 false를 반환할 수 있습니다. 일부 구현은 전자의 동작을 나타내고 일부는 후자를 나타냅니다. 보다 일반적으로, 완료로 인해 부적격 요소가 집합에 삽입되지 않는 부적격 요소에 대한 작업을 시도하면 구현 옵션에 따라 예외가 발생하거나 성공할 수 있습니다. 이러한 예외는 이 인터페이스의 사양에서 "선택 사항"으로 표시됩니다.
Unmodifiable Sets
Set.of 및 Set.copyOf 정적 팩토리 메서드는 수정할 수 없는 집합을 만드는 편리한 방법을 제공합니다. 이러한 메서드로 생성된 Set 인스턴스는 다음과 같은 특성을 가집니다.
- 수정할 수 없습니다. 요소를 추가하거나 제거할 수 없습니다. Set에서 mutator 메서드를 호출하면 항상 UnsupportedOperationException이 발생합니다. 그러나 포함된 요소 자체가 변경 가능한 경우 Set이 일관되지 않게 동작하거나 해당 내용이 변경된 것처럼 보일 수 있습니다.
- null 요소를 허용하지 않습니다. null 요소로 생성하려고 하면 NullPointerException이 발생합니다.
- 모든 요소가 직렬화 가능한 경우 직렬화 가능합니다.
- 생성 시 중복 요소를 거부합니다. 정적 팩토리 메서드에 중복 요소가 전달되면 IllegalArgumentException이 발생합니다.
- 세트 요소의 반복 순서는 지정되지 않았으며 변경될 수 있습니다.
- 그들은 value 기반입니다. 호출자는 반환된 인스턴스의 ID에 대해 가정해서는 안 됩니다. 팩토리는 새로운 인스턴스를 생성하거나 기존 인스턴스를 재사용할 수 있습니다. 따라서 이러한 인스턴스에서 ID에 민감한 작업(참조 같음(==), ID 해시 코드 및 동기화)은 신뢰할 수 없으므로 피해야 합니다.
- 직렬화된 양식 페이지에 지정된 대로 직렬화됩니다.
이 인터페이스는 Java Collections Framework의 구성원입니다.
Since:
1.2
See Also:
Collection, List, SortedSet, HashSet, TreeSet, AbstractSet, Collections.singleton(java.lang.Object), Collections.EMPTY_SET