ISpliterator 인터페이스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
원본의 요소를 트래버스하고 분할하기 위한 개체입니다.
[Android.Runtime.Register("java/util/Spliterator", "", "Java.Util.ISpliteratorInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public interface ISpliterator : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/Spliterator", "", "Java.Util.ISpliteratorInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type ISpliterator = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 파생
- 특성
- 구현
설명
원본의 요소를 트래버스하고 분할하기 위한 개체입니다. Spliterator에서 다루는 요소의 원본은 배열, Collection
, IO 채널 또는 생성기 함수와 같은 것일 수 있습니다.
스플리터레이터는 요소를 개별적으로(#tryAdvance tryAdvance()
) 또는 순차적으로 대량(#forEachRemaining forEachRemaining()
)으로 트래버스할 수 있습니다.
또한 Spliterator는 병렬 작업에 사용할 수 있도록 일부 요소를 다른 Spliterator로 분할할 수도 있습니다(사용 #trySplit
). 분할할 수 없거나 매우 불균형하거나 비효율적인 방식으로 분할할 수 없는 분할기를 사용하는 작업은 병렬 처리의 이점을 얻을 가능성이 낮습니다. 통과 및 배기 요소 분할; 각 분할기는 단일 대량 계산에만 유용합니다.
또한 Spliterator는 , , #SIZED
#IMMUTABLE
#SORTED
#NONNULL
#DISTINCT
#CONCURRENT
, 및 간의 #ORDERED
구조, 원본 및 요소 집합 #characteristics()
을 보고합니다.#SUBSIZED
분할기 클라이언트에서 계산을 제어, 특수화 또는 단순화하기 위해 사용할 수 있습니다. 예를 들어 의 Spliterator Collection
는 를 보고 SIZED
하고, 에 대한 Set
Spliterator는 를 보고 DISTINCT
하고, 에 대한 SortedSet
Spliterator도 를 보고 SORTED
합니다. 특성은 간단한 통합 비트 집합으로 보고됩니다.
일부 특성은 메서드 동작을 추가로 제한합니다. 예를 들어 이면 ORDERED
순회 메서드가 문서화된 순서를 따라야 합니다. 새 특성은 나중에 정의될 수 있으므로 구현자는 목록에 없는 값에 의미를 할당해서는 안 됩니다.
"binding">c IMMUTABLE</c> 또는 <c>>CONCURRENT</c>를 보고<하지 않는 분할기에는 분할기가 <>요소 원본에 바인딩/em>을 바인딩<하는 경우 및 바인딩 후 검색된 요소 원본의 구조적 간섭 감지와 관련된 문서화된 정책이 있어야 합니다. em>late-binding</em> Spliterator는 <Spliterator를 만들 때가 아니라 예상 크기에 대한 첫 번째 순회, 첫 번째 분할 또는 첫 번째 쿼리의 지점에서 요소의 원본에 바인딩합니다. 지연 바인딩</em>이 아닌 <>Spliterator는 생성 시점 또는 메서드의 첫 번째 호출 시점에 요소의 원본에 바인딩됩니다. 바인딩 전에 원본에 대한 수정 내용은 Spliterator가 트래버스될 때 반영됩니다. 분할기를 바인딩한 후에는 구조적 간섭이 감지되면 최대한 throw ConcurrentModificationException
해야 합니다. 이를 수행하는 분할기를 장애>조치(fail-fast</em)라고 <합니다>. Spliterator의 대량 순회 메서드(#forEachRemaining forEachRemaining()
)는 요소별로 확인하고 즉시 실패하는 대신 모든 요소가 트래버스된 후 구조적 간섭을 위해 순회 및 검사 최적화할 수 있습니다.
스플리터레이터는 메서드를 통해 #estimateSize
나머지 요소의 수를 예측할 수 있습니다. 특성 #SIZED
에 반영된 것처럼 이 값은 성공적인 순회에서 발생할 수 있는 요소 수에 정확히 해당합니다. 그러나 정확히 알려지지 않은 경우에도 예상 값은 더 분할하거나 나머지 요소를 순차적으로 트래버스하는 것이 바람직한지 여부를 확인하는 것과 같이 원본에서 수행되는 작업에 여전히 유용할 수 있습니다.
병렬 알고리즘의 명백한 유틸리티에도 불구하고 분할기는 스레드로부터 안전하지 않을 것으로 예상됩니다. 대신 분할기를 사용하는 병렬 알고리즘을 구현하면 분할기가 한 번에 하나의 스레드에서만 사용되도록 해야 합니다. 이는 일반적으로 직렬 스레드 제한</em>을 통해>< 쉽게 얻을 수 있으며, 이는 종종 재귀 분해로 작동하는 일반적인 병렬 알고리즘의 자연스러운 결과입니다. 스레드 호출 #trySplit()
은 반환된 Spliterator를 다른 스레드에 넘겨줄 수 있으며, 이 스레드는 해당 Spliterator를 트래버스하거나 추가로 분할할 수 있습니다. 둘 이상의 스레드가 동일한 분할기에서 동시에 작동하는 경우 분할 및 순회 동작은 정의되지 않습니다. 원래 스레드가 처리를 위해 스플리터레이터를 다른 스레드로 전달하는 경우 특정 보장(예: 스플리터레이터의 #estimateSize()
SIZED
정확도)이 통과가 시작되기 전에만 유효하기 때문에 요소와 함께 #tryAdvance(Consumer) tryAdvance()
사용되기 전에 해당 핸드오프가 발생하는 것이 가장 좋습니다.
의 Spliterator
기본 하위 형식 특수화는 , OfLong long
및 OfDouble double
값에 대해 OfInt int
제공됩니다. 해당 래퍼 클래스의 Spliterator#tryAdvance(java.util.function.Consumer)
인스턴스에 대한 및 Spliterator#forEachRemaining(java.util.function.Consumer)
상자 기본값의 하위 형식 기본 구현입니다. 이러한 권투는 기본 특수화를 사용하여 얻은 성능 이점을 훼손할 수 있습니다. boxing을 방지하려면 해당 기본 기반 메서드를 사용해야 합니다. 예를 들어 및 Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer)
은 Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer)
및 Spliterator.OfInt#forEachRemaining(java.util.function.Consumer)
에 대한 기본 설정 Spliterator.OfInt#tryAdvance(java.util.function.Consumer)
에서 사용해야 합니다. boxing 기반 메서드 #tryAdvance tryAdvance()
를 사용하여 기본값을 트래버스하며 #forEachRemaining(java.util.function.Consumer) forEachRemaining()
, 박스형 값으로 변환된 값이 발생하는 순서에는 영향을 주지 않습니다.
1.8에 추가되었습니다.
에 대한 Java 설명서입니다 java.util.Spliterator
.
이 페이지의 일부는 만들고 공유하며 에 설명된 용어에 따라 사용되는 작업을 기반으로 수정됩니다.
속성
Comparator |
이 Spliterator의 원본이 인 |
ExactSizeIfKnown |
이 Spliterator가 이면 를 반환 |
Handle |
기본 Android 개체의 JNI 값을 가져옵니다. (다음에서 상속됨 IJavaObject) |
JniIdentityHashCode |
|
JniManagedPeerState |
관리되는 피어의 상태입니다. (다음에서 상속됨 IJavaPeerable) |
JniPeerMembers |
멤버 액세스 및 호출 지원. (다음에서 상속됨 IJavaPeerable) |
PeerReference |
JniObjectReference 래핑된 Java 개체 instance 의 를 반환합니다. (다음에서 상속됨 IJavaPeerable) |
메서드
Characteristics() |
이 Spliterator 및 해당 요소의 특성 집합을 반환합니다. |
Disposed() |
instance 삭제되었을 때 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
DisposeUnlessReferenced() |
이 instance 대한 미해결 참조가 없으면 를 호출 |
EstimateSize() |
순회에서 발생할 요소 수의 추정값을 |
Finalized() |
instance 완료되면 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
ForEachRemaining(IConsumer) |
모든 요소가 처리되거나 작업이 예외를 throw할 때까지 현재 스레드에서 나머지 각 요소에 대해 지정된 작업을 순차적으로 수행합니다. |
HasCharacteristics(Int32) |
이 Spliterator의 |
SetJniIdentityHashCode(Int32) |
에서 반환 |
SetJniManagedPeerState(JniManagedPeerStates) |
원본의 요소를 트래버스하고 분할하기 위한 개체입니다. (다음에서 상속됨 IJavaPeerable) |
SetPeerReference(JniObjectReference) |
에서 반환 |
TryAdvance(IConsumer) |
나머지 요소가 있는 경우 는 지정된 작업을 수행하고 를 반환하고 |
TrySplit() |
이 분할자를 분할할 수 있는 경우 요소를 포함하는 Spliterator를 반환합니다. 그러면 이 메서드에서 반환될 때 이 Spliterator에서 다루지 않습니다. |
UnregisterFromRuntime() |
런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 instance 등록을 취소합니다. (다음에서 상속됨 IJavaPeerable) |
확장 메서드
JavaCast<TResult>(IJavaObject) |
Android 런타임 확인 형식 변환을 수행합니다. |
JavaCast<TResult>(IJavaObject) |
원본의 요소를 트래버스하고 분할하기 위한 개체입니다. |
GetJniTypeName(IJavaPeerable) |
원본의 요소를 트래버스하고 분할하기 위한 개체입니다. |