ISpliterator Schnittstelle
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ein Objekt zum Durchlaufen und Partitionieren von Elementen einer Quelle.
[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
- Abgeleitet
- Attribute
- Implementiert
Hinweise
Ein Objekt zum Durchlaufen und Partitionieren von Elementen einer Quelle. Die Quelle von Elementen, die von einem Spliterator abgedeckt werden, kann z. B. ein Array, ein Collection
E/A-Kanal oder eine Generatorfunktion sein.
Ein Spliterator kann Elemente einzeln (#tryAdvance tryAdvance()
) oder sequenziell in Massen (#forEachRemaining forEachRemaining()
) durchlaufen.
Ein Spliterator kann auch einige seiner Elemente (mit #trySplit
) als ein anderer Spliterator partitionieren, um in möglicherweise parallelen Vorgängen verwendet zu werden. Vorgänge, die einen Spliterator verwenden, der nicht geteilt werden kann oder dies in hohem Maße unausgeglichen oder ineffizient ist, sind wahrscheinlich nicht von Parallelität profitieren. Durchqueren und Teilen von Auspuffelementen; Jeder Spliterator ist nur für eine einzelne Massenberechnung nützlich.
Ein Spliterator meldet auch eine Reihe von #characteristics()
Strukturen, Quellen und Elementen aus , zwischen #ORDERED
, #DISTINCT
, , #SORTED
, #SIZED
, #NONNULL
, , #IMMUTABLE
, , #CONCURRENT
und #SUBSIZED
. Diese können von Spliterator-Clients eingesetzt werden, um die Berechnung zu steuern, zu spezialisieren oder zu vereinfachen. Beispielsweise würde ein Spliterator für einen Collection
Bericht SIZED
, ein Spliterator für einen Set
Bericht DISTINCT
und ein Spliterator für einen SortedSet
Bericht auch berichten SORTED
. Die Merkmale werden als einfaches unioniertes Bit-Set gemeldet.
Einige Merkmale beschränken zusätzlich das Verhalten der Methode; Wenn z. B ORDERED
. die Traversalmethoden ihrer dokumentierten Reihenfolge entsprechen müssen. Neue Merkmale können in Zukunft definiert werden, sodass Implementierungen keine Bedeutungen für nicht aufgelistete Werte zuweisen sollten.
"Binding">Ein Spliterator, der c IMMUTABLE</c> oder <c>GLEICHZEITIG</c> nicht meldet<>, wird erwartet, dass eine dokumentierte Richtlinie zu folgendem Thema vorhanden ist: wenn der Spliterator <em>an die Elementquelle bindet</em> und die Erkennung struktureller Störungen der Elementquelle, die nach der Bindung erkannt wurde. Ein <em late-binding<>/em> Spliterator bindet an die Quelle von Elementen am Punkt des ersten Durchgangs, der ersten Unterbrechung oder der ersten Abfrage nach geschätzter Größe, anstatt zu dem Zeitpunkt, zu dem der Spliterator erstellt wird. Ein Spliterator, der nicht <spät>gebunden</em> ist, bindet an die Quelle von Elementen an den Zeitpunkt der Konstruktion oder den ersten Aufruf einer Methode. Änderungen, die vor der Bindung an der Quelle vorgenommen wurden, werden angezeigt, wenn der Spliterator durchlaufen wird. Nach der Bindung sollte ein Spliterator auf best-effort-Basis ausgelöst ConcurrentModificationException
werden, wenn strukturelle Störungen erkannt werden. Spliteratoren, die dies tun, werden als em>fail-fast</em> bezeichnet<. Die Massendurchquerungsmethode (#forEachRemaining forEachRemaining()
) eines Spliterators kann die Traversal- und Überprüfung auf strukturelle Störungen optimieren, nachdem alle Elemente durchlaufen wurden, anstatt die einzelnen Elemente zu überprüfen und sofort fehlschlagen zu müssen.
Spliteratoren können eine Schätzung der Anzahl der verbleibenden Elemente über die #estimateSize
Methode bereitstellen. Im Idealfall entspricht dieser Wert genau der Anzahl der Elemente, #SIZED
die bei einer erfolgreichen Durchquerung gefunden würden. Selbst wenn er nicht genau bekannt ist, kann ein geschätzter Wert jedoch dennoch für Vorgänge nützlich sein, die auf der Quelle ausgeführt werden, z. B. um festzustellen, ob es vorzuziehen ist, die verbleibenden Elemente sequenziell aufzuteilen oder zu durchlaufen.
Trotz ihres offensichtlichen Nutzens in parallelen Algorithmen werden Spliteratoren nicht erwartet, dass sie threadsicher sind; Stattdessen sollten Implementierungen paralleler Algorithmen mit Spliteratoren sicherstellen, dass der Spliterator jeweils nur von einem Thread verwendet wird. Dies ist im Allgemeinen leicht über <die>serielle Threadeinschränkung</em> zu erreichen, was oft eine natürliche Folge typischer paralleler Algorithmen ist, die durch rekursive Dekomposition funktionieren. Ein Threadaufruf #trySplit()
kann den zurückgegebenen Spliterator an einen anderen Thread übergeben, der wiederum den Spliterator durchlaufen oder weiter teilen kann. Das Verhalten von Splitting und Traversal ist nicht definiert, wenn zwei oder mehr Threads gleichzeitig auf demselben Spliterator arbeiten. Wenn der ursprüngliche Thread einen Spliterator zur Verarbeitung an einen anderen Thread ausgibt, ist es am besten, wenn diese Übergabe vor dem Verbrauch #tryAdvance(Consumer) tryAdvance()
von Elementen erfolgt, da bestimmte Garantien (z. B. die Genauigkeit für #estimateSize()
SIZED
Spliteratoren) nur gültig sind, bevor die Durchquerung begonnen hat.
Primitive Untertypspezialisierungen werden Spliterator
für OfInt int
, OfLong long
und OfDouble double
Werte bereitgestellt. Die Standardimplementierungen des Untertyps und Spliterator#forEachRemaining(java.util.function.Consumer)
der Spliterator#tryAdvance(java.util.function.Consumer)
Feldgrundtypen für Instanzen ihrer entsprechenden Wrapperklasse. Solche Boxen können leistungsvorteile untergraben, die durch die Verwendung der Grundtypspezialisierungen gewonnen wurden. Um Boxen zu vermeiden, sollten die entsprechenden primitiven Methoden verwendet werden. Beispielsweise Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer)
sollte und Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer)
sollte in den Einstellungen Spliterator.OfInt#tryAdvance(java.util.function.Consumer)
und Spliterator.OfInt#forEachRemaining(java.util.function.Consumer)
. Durchqueren von grundtypischen Werten mithilfe von boxbasierten Methoden #tryAdvance tryAdvance()
und #forEachRemaining(java.util.function.Consumer) forEachRemaining()
wirkt sich nicht auf die Reihenfolge aus, in der die Werte, die in Boxwerte transformiert werden, gefunden werden.
Hinzugefügt in 1.8.
Java-Dokumentation für java.util.Spliterator
.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.
Eigenschaften
Comparator |
Wenn die Quelle |
ExactSizeIfKnown |
Convenience-Methode, die zurückgibt |
Handle |
Ruft den JNI-Wert des zugrunde liegenden Android-Objekts ab. (Geerbt von IJavaObject) |
JniIdentityHashCode |
Gibt den Wert |
JniManagedPeerState |
Status des verwalteten Peers. (Geerbt von IJavaPeerable) |
JniPeerMembers |
Mitgliedszugriff und Aufrufunterstützung. (Geerbt von IJavaPeerable) |
PeerReference |
Gibt eine JniObjectReference der umbrochenen Java-Objektinstanz zurück. (Geerbt von IJavaPeerable) |
Methoden
Characteristics() |
Gibt eine Reihe von Merkmalen dieses Spliterators und seiner Elemente zurück. |
Disposed() |
Wird aufgerufen, wenn die Instanz verworfen wurde. (Geerbt von IJavaPeerable) |
DisposeUnlessReferenced() |
Wenn keine offenen Verweise auf diese Instanz vorhanden sind, wird nichts aufgerufen |
EstimateSize() |
Gibt eine Schätzung der Anzahl der Elemente zurück, die von einem |
Finalized() |
Wird aufgerufen, wenn die Instanz abgeschlossen wurde. (Geerbt von IJavaPeerable) |
ForEachRemaining(IConsumer) |
Führt die angegebene Aktion für jedes verbleibende Element sequenziell im aktuellen Thread aus, bis alle Elemente verarbeitet wurden oder die Aktion eine Ausnahme auslöst. |
HasCharacteristics(Int32) |
Gibt zurück |
SetJniIdentityHashCode(Int32) |
Legen Sie den von |
SetJniManagedPeerState(JniManagedPeerStates) |
Ein Objekt zum Durchlaufen und Partitionieren von Elementen einer Quelle. (Geerbt von IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Legen Sie den von |
TryAdvance(IConsumer) |
Wenn ein verbleibendes Element vorhanden ist, führt sie die angegebene Aktion aus, und gibt |
TrySplit() |
Wenn dieser Spliterator partitioniert werden kann, wird ein Spliterator zurückgegeben, der Elemente abdeckt, die auf der Rückgabe von dieser Methode nicht von diesem Spliterator abgedeckt werden. |
UnregisterFromRuntime() |
Heben Sie die Registrierung dieser Instanz auf, damit die Laufzeit sie nicht aus zukünftigen Java.Interop.JniRuntime+JniValueManager.PeekValue Aufrufen zurückgibt. (Geerbt von IJavaPeerable) |
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine android-laufzeitgecheckte Typkonvertierung aus. |
JavaCast<TResult>(IJavaObject) |
Ein Objekt zum Durchlaufen und Partitionieren von Elementen einer Quelle. |
GetJniTypeName(IJavaPeerable) |
Ein Objekt zum Durchlaufen und Partitionieren von Elementen einer Quelle. |