다음을 통해 공유


ICollection 인터페이스

정의

컬렉션 계층 구조의 루트 인터페이스입니다.

[Android.Runtime.Register("java/util/Collection", "", "Java.Util.ICollectionInvoker")]
[Java.Interop.JavaTypeParameters(new System.String[] { "E" })]
public interface ICollection : IDisposable, Java.Interop.IJavaPeerable, Java.Lang.IIterable
[<Android.Runtime.Register("java/util/Collection", "", "Java.Util.ICollectionInvoker")>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "E" })>]
type ICollection = interface
    interface IIterable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
파생
특성
구현

설명

컬렉션 계층 구조의 루트 인터페이스입니다. 컬렉션은 해당 요소라고 하는 개체 그룹을 나타냅니다. 일부 컬렉션은 중복 요소를 허용하고 다른 컬렉션은 허용하지 않습니다. 일부는 순서가 지정되고 다른 일부는 순서가 지정되지 않습니다. JDK는 이 인터페이스의 직접적인 구현을 제공하지 않습니다. 이 인터페이스는 다음과 같은 SetList보다 구체적인 하위 인터페이스의 구현을 제공합니다. 이 인터페이스는 일반적으로 컬렉션을 전달하고 최대 일반성이 필요한 위치를 조작하는 데 사용됩니다.

모음 또는 다중 집합 (중복 요소를 포함할 수 있는 순서가 지정되지 않은 컬렉션)은 이 인터페이스를 직접 구현해야 합니다.

모든 범용 Collection 구현 클래스(일반적으로 하위 인터페이스 중 하나를 통해 간접적으로 구현 Collection )는 빈 컬렉션을 만드는 void(인수 없음) 생성자와 인수와 동일한 요소를 사용하여 새 컬렉션을 만드는 형식 Collection의 단일 인수가 있는 생성자라는 두 개의 "표준" 생성자를 제공해야 합니다. 실제로 후자의 생성자를 사용하면 모든 컬렉션을 복사하여 원하는 구현 형식의 동등한 컬렉션을 생성할 수 있습니다. 인터페이스에 생성자를 포함할 수 없으므로 이 규칙을 적용할 수 있는 방법은 없지만 Java 플랫폼 라이브러리의 모든 범용 Collection 구현은 준수합니다.

특정 메서드는 선택 사항으로 지정됩니다. 컬렉션 구현에서 특정 작업을 구현하지 않는 경우 throw UnsupportedOperationException할 해당 메서드를 정의해야 합니다. 이러한 메서드는 컬렉션 인터페이스의 메서드 사양에서 "선택적 작업"으로 표시됩니다.

"optional-restrictions">일부 컬렉션 구현에는 포함할 수 있는 요소에 대한 제한이 있습니다. 예를 들어 일부 구현은 null 요소를 금지하고 일부는 해당 요소의 형식에 대한 제한을 가합니다. 부적격 요소를 추가하려고 시도하면 일반적으로 선택되지 않은 예외(일반적으로 NullPointerException 또는 ClassCastException.)가 throw됩니다. 부적격 요소의 존재를 쿼리하려고 하면 예외가 throw되거나 단순히 false를 반환할 수 있습니다. 일부 구현은 이전 동작을 나타내고 일부는 후자를 표시합니다. 일반적으로 컬렉션에 부적격 요소를 삽입하지 않는 부적격 요소에 대한 작업을 시도하면 예외가 throw되거나 구현 옵션에서 성공할 수 있습니다. 이러한 예외는 이 인터페이스의 사양에서 "선택 사항"으로 표시됩니다.

자체 동기화 정책을 결정하는 것은 각 컬렉션에 달려 있습니다. 구현에 의해 더 강력한 보장이 없는 경우 정의되지 않은 동작은 다른 스레드에 의해 변경되는 컬렉션에서 메서드를 호출한 결과일 수 있습니다. 여기에는 직접 호출, 호출을 수행할 수 있는 메서드에 컬렉션 전달 및 기존 반복기를 사용하여 컬렉션을 검사하는 작업이 포함됩니다.

Collections Framework 인터페이스의 많은 메서드는 메서드 측면에서 정의됩니다 Object#equals(Object) equals . 예를 들어 메서드의 사양 #contains(Object) contains(Object o) 은 다음과 같습니다. "이 컬렉션에 하나 (o==null ? e==null : o.equals(e))이상의 요소가 e 포함되어 있는 경우에만 반환 true 됩니다." 이 사양은 null이 아닌 인수 o 를 사용하여 호출하면 모든 요소e에 대해 호출된다는 것을 암시해서는됩니다 o.equals(e)Collection.contains. 구현은 두 요소의 equals 해시 코드를 먼저 비교하여 호출을 피할 수 있는 최적화를 자유롭게 구현할 수 있습니다. (이 사양은 Object#hashCode() 같지 않은 해시 코드가 있는 두 개체가 같을 수 없음을 보장합니다.) 보다 일반적으로 다양한 Collections Framework 인터페이스의 구현은 구현자가 적절하다고 판단하는 모든 기본 메서드의 지정된 동작을 Object 자유롭게 활용할 수 있습니다.

컬렉션의 재귀 순회를 수행하는 일부 컬렉션 작업은 컬렉션이 직접 또는 간접적으로 포함된 자체 참조 인스턴스에 대한 예외를 제외하고 실패할 수 있습니다. 여기에는 , equals()hashCode()toString() 메서드가 포함됩니다clone(). 구현은 필요에 따라 자체 참조 시나리오를 처리할 수 있지만 대부분의 현재 구현은 그렇지 않습니다.

<h2>"view">View Collections</h2>

대부분의 컬렉션은 포함된 요소에 대한 스토리지를 관리합니다. 반면 뷰 컬렉션 자체는 요소를 저장하지 않고 대신 백업 컬렉션에 의존하여 실제 요소를 저장합니다. 뷰 컬렉션 자체에서 처리되지 않는 작업은 백업 컬렉션에 위임됩니다. 뷰 컬렉션의 예로는 메서드(예: Collections#checkedCollection Collections.checkedCollection, 및)에서 반환된 래퍼 컬렉션이 Collections#synchronizedCollection Collections.synchronizedCollection있습니다 Collections#unmodifiableCollection Collections.unmodifiableCollection. 뷰 컬렉션의 다른 예로는 같은 요소의 다른 표현을 제공하는 컬렉션(예: 제공된 List#subList List.subList대로 ) NavigableSet#subSet NavigableSet.subSet또는 Map#entrySet Map.entrySet. 백업 컬렉션에 대한 모든 변경 내용은 뷰 컬렉션에 표시됩니다. 이에 따라 뷰 컬렉션 및 mdash에 대한 모든 변경 내용이 적용됩니다. 변경이 허용되면 — 은 지원 컬렉션에 기록됩니다. 기술적으로 컬렉션은 아니지만 인스턴스 IteratorListIterator 백업 컬렉션에 수정 내용이 기록되도록 허용할 수 있으며, 경우에 따라 백업 컬렉션에 대한 수정 내용이 반복 중에 반복기에 표시됩니다.

<h2>"수정할 수 없음">수정할 수 없는 컬렉션</h2>

이 인터페이스의 특정 메서드는 "파괴적"으로 간주되며 해당 메서드가 작동하는 컬렉션 내에 포함된 개체 그룹을 수정한다는 측면에서 "변경자" 메서드라고 합니다. 이 컬렉션 구현이 작업을 지원하지 않는 경우 throw UnsupportedOperationException 하도록 지정할 수 있습니다. 이러한 메서드는 호출이 컬렉션에 영향을 주지 않을 경우 throw UnsupportedOperationException 해야 합니다(필수는 아님). 예를 들어 작업을 지원하지 않는 컬렉션을 고려합니다 #add add . 빈 컬렉션을 인수로 사용하여 이 컬렉션에서 메서드를 호출하면 #addAll addAll 어떻게 됩니까? 0개 요소를 추가해도 효과가 없으므로 이 컬렉션은 예외를 throw하지 않고 아무 작업도 수행하지 않는 것이 허용됩니다. 그러나 특정 경우에만 throw하면 프로그래밍 오류가 발생할 수 있으므로 이러한 경우는 무조건 예외를 throw하는 것이 좋습니다.

수정할 수 없는 컬렉션은 컬렉션이며, 모든 변경자 메서드(위에 정의된 대로)가 throwUnsupportedOperationException되도록 지정됩니다. 따라서 이러한 컬렉션은 메서드를 호출하여 수정할 수 없습니다. 컬렉션을 올바르게 수정할 수 없도록 하려면 컬렉션에서 파생된 뷰 컬렉션도 수정할 수 없어야 합니다. 예를 들어 목록을 수정할 수 없는 경우 반환된 List#subList List.subList 목록도 수정할 수 없습니다.

수정할 수 없는 컬렉션이 반드시 변경할 수 있는 것은 아닙니다. 포함된 요소가 변경 가능한 경우 전체 컬렉션은 수정할 수 없더라도 명확하게 변경할 수 있습니다. 예를 들어 변경 가능한 요소가 포함된 두 개의 수정할 수 없는 목록을 고려해 보세요. 두 목록을 모두 수정할 수 없더라도 요소가 변경된 경우 호출 list1.equals(list2) 결과는 다음 호출과 다를 수 있습니다. 그러나 수정할 수 없는 컬렉션에 변경할 수 없는 모든 요소가 포함된 경우 효과적으로 변경할 수 없는 것으로 간주될 수 있습니다.

<h2>"unmodview">수정할 수 없는 뷰 컬렉션</h2>

수정할 수 없는 뷰 컬렉션은 수정할 수 없는 컬렉션이며 백업 컬렉션에 대한 뷰이기도 합니다. 위에서 설명한 대로 변경자 메서드가 throw UnsupportedOperationException되고 읽기 및 쿼리 메서드가 백업 컬렉션에 위임됩니다. 지원 컬렉션에 대한 읽기 전용 액세스를 제공하는 효과가 있습니다. 이는 구성 요소가 사용자에게 내부 컬렉션에 대한 읽기 권한을 제공하는 동시에 이러한 컬렉션을 예기치 않게 수정하지 못하도록 하는 데 유용합니다. 수정할 수 없는 뷰 컬렉션의 예는 , Collections#unmodifiableList Collections.unmodifiableList및 관련 메서드에서 Collections#unmodifiableCollection Collections.unmodifiableCollection반환된 컬렉션입니다.

백업 컬렉션에 대한 변경은 여전히 가능할 수 있으며, 변경이 발생하는 경우 수정할 수 없는 보기를 통해 볼 수 있습니다. 따라서 수정할 수 없는 뷰 컬렉션이 반드시 변경할 수 없는 것은 아닙니다. 그러나 수정할 수 없는 뷰의 백업 컬렉션이 효과적으로 변경할 수 없거나 백업 컬렉션에 대한 유일한 참조가 수정할 수 없는 뷰를 통해서만 있는 경우 보기는 변경할 수 없는 것으로 간주될 수 있습니다.

<h2>"serializable">Collections</h2 직렬화 가능성>

컬렉션의 직렬화 가능성은 선택 사항입니다. 따라서 인터페이스를 구현하기 위해 선언된 컬렉션 인터페이스는 java.io.Serializable 없습니다. 그러나 직렬화 기능은 일반적으로 유용한 것으로 간주되므로 대부분의 컬렉션 구현을 직렬화할 수 있습니다.

공용 클래스(예: ArrayList 또는 HashMap)인 컬렉션 구현은 실제로 직렬화할 수 있는 경우 인터페이스를 Serializable 구현하도록 선언됩니다. 일부 컬렉션 구현은 수정할 수 없는 컬렉션과 같은 공용 클래스가 아닙니다. 이러한 경우 이러한 컬렉션의 직렬화 가능성은 해당 컬렉션을 만드는 메서드의 사양이나 다른 적절한 위치에 설명되어 있습니다. 컬렉션의 직렬화 가능성을 지정하지 않은 경우 이러한 컬렉션의 직렬화 가능성을 보장하지 않습니다. 특히 많은 뷰 컬렉션은 직렬화할 수 없습니다.

인터페이스를 구현하는 컬렉션 구현은 Serializable serialize 가능하도록 보장할 수 없습니다. 그 이유는 일반적으로 컬렉션에 다른 형식의 요소가 포함되어 있으므로 일부 요소 형식의 인스턴스를 실제로 직렬화할 수 있는지 여부를 정적으로 확인할 수 없기 때문입니다. 예를 들어 인터페이스를 구현하지 않는 직렬화 가능 Collection<E>E 을 고려합니다Serializable. 직렬화 가능한 일부 하위 형식 E의 요소만 포함하거나 비어 있는 경우 컬렉션을 직렬화할 수 있습니다. 따라서 컬렉션 전체의 직렬화 가능성은 컬렉션 자체가 직렬화 가능한지 여부와 포함된 모든 요소도 직렬화할 수 있는지 여부에 따라 달라지므로 컬렉션은 조건부로 직렬화할 수 있다고 합니다.

인스턴스 및 .의 SortedSetSortedMap인스턴스에 추가 사례가 발생합니다. 이러한 컬렉션은 집합 요소 또는 맵 키에 순서를 적용하는 컬렉션으로 Comparator 만들 수 있습니다. 이러한 컬렉션은 제공된 Comparator 컬렉션도 직렬화할 수 있는 경우에만 직렬화할 수 있습니다.

이 인터페이스는 Java 컬렉션 프레임워크 멤버입니다.

1.2에 추가되었습니다.

에 대한 java.util.CollectionJava 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

속성

Handle

기본 Android 개체의 JNI 값을 가져옵니다.

(다음에서 상속됨 IJavaObject)
IsEmpty

요소가 없는 경우 Collection 반환합니다.

JniIdentityHashCode

래핑된 인스턴스의 java.lang.System.identityHashCode() 값을 반환합니다.

(다음에서 상속됨 IJavaPeerable)
JniManagedPeerState

관리되는 피어의 상태입니다.

(다음에서 상속됨 IJavaPeerable)
JniPeerMembers

멤버 액세스 및 호출 지원.

(다음에서 상속됨 IJavaPeerable)
PeerReference

JniObjectReference 래핑된 Java 개체 인스턴스의 값을 반환합니다.

(다음에서 상속됨 IJavaPeerable)

메서드

Add(Object)

이 컬렉션에 지정된 요소(선택적 작업)가 포함되어 있는지 확인합니다.

AddAll(ICollection)

지정된 컬렉션의 모든 요소를 이 컬렉션에 추가합니다(선택적 작업).

Clear()

이 컬렉션에서 모든 요소를 제거합니다(선택적 작업).

Contains(Object)

이 컬렉션에 지정된 요소가 포함되어 있는지를 반환 true 합니다.

ContainsAll(ICollection)

이 컬렉션에 지정된 컬렉션의 모든 요소가 포함되어 있는지를 반환 true 합니다.

Disposed()

인스턴스가 삭제되었을 때 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
DisposeUnlessReferenced()

이 인스턴스에 대한 미해결 참조가 없으면 호출 Dispose()합니다. 그렇지 않으면 아무 작업도 수행하지 않습니다.

(다음에서 상속됨 IJavaPeerable)
Equals(Object)

지정된 개체를 이 컬렉션과 비교하여 같은지 확인합니다.

Finalized()

인스턴스가 종료될 때 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
ForEach(IConsumer)

모든 요소가 처리되거나 작업이 예외를 Iterable throw할 때까지 각 요소에 대해 지정된 작업을 수행합니다.

(다음에서 상속됨 IIterable)
GetHashCode()

이 컬렉션의 해시 코드 값을 반환합니다.

Iterator()

이 컬렉션의 요소에 대한 반복기를 반환합니다.

Remove(Object)

지정된 요소의 단일 인스턴스가 있는 경우 이 컬렉션에서 제거합니다(선택적 작업).

RemoveAll(ICollection)

지정된 컬렉션에도 포함된 이 컬렉션의 모든 요소를 제거합니다(선택적 작업).

RemoveIf(IPredicate)

지정된 조건자를 충족하는 이 컬렉션의 모든 요소를 제거합니다.

RetainAll(ICollection)

지정된 컬렉션에 포함된 이 컬렉션의 요소만 유지합니다(선택적 작업).

SetJniIdentityHashCode(Int32)

에서 반환 JniIdentityHashCode하는 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

컬렉션 계층 구조의 루트 인터페이스입니다.

(다음에서 상속됨 IJavaPeerable)
SetPeerReference(JniObjectReference)

에서 반환 PeerReference하는 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
Size()

이 컬렉션의 요소 수를 반환합니다.

Spliterator()

Spliterator 에서 Iterable설명하는 요소 위에 대해 만듭니다.

(다음에서 상속됨 IIterable)
ToArray()

이 컬렉션의 모든 요소를 포함하는 배열을 반환합니다.

ToArray(IIntFunction)

제공된 함수를 사용하여 반환된 generator 배열을 할당하여 이 컬렉션의 모든 요소가 포함된 배열을 반환합니다.

ToArray(Object[])

이 컬렉션의 모든 요소를 포함하는 배열을 반환합니다. 반환된 배열의 런타임 형식은 지정된 배열의 런타임 형식입니다.

UnregisterFromRuntime()

런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 인스턴스의 등록을 취소합니다.

(다음에서 상속됨 IJavaPeerable)

명시적 인터페이스 구현

IIterable.Spliterator()

이 컬렉션의 Spliterator 요소 위에 대해 만듭니다.

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

컬렉션 계층 구조의 루트 인터페이스입니다.

GetJniTypeName(IJavaPeerable)

컬렉션 계층 구조의 루트 인터페이스입니다.

ToEnumerable(IIterable)

컬렉션 계층 구조의 루트 인터페이스입니다.

ToEnumerable<T>(IIterable)

컬렉션 계층 구조의 루트 인터페이스입니다.

적용 대상