Effizienz von collection.stream (). skip (). findFirst ()

8

Angenommen set ist ein HashSet mit n elements und k ist etwas int zwischen 0 (inklusive) und n (exklusiv).

Kann jemand in einfachen Worten erklären, was tatsächlich passiert, wenn Sie das tun?

%Vor%

Vor allem, was ist die zeitliche Komplexität davon? Bietet der Zusatz von spliterator() zur Schnittstelle Collection nun einen schnelleren Zugriff auf "zufällige" Elemente von Sammlungen, als dies mit Java 7 möglich gewesen wäre?

    
Paul Boddington 14.04.2016, 02:52
quelle

2 Antworten

6

Die aktuelle Implementierung hat O (k) -Komplexität und entspricht weniger dem folgenden:

%Vor%

Die aktuelle Implementierung berücksichtigt niemals das Merkmal ORDERED für sequentielle Streams. Der Code, der in @ the8472 zitiert wird, funktioniert nur für parallele Streams. Im Parallelfall ist die amortisierte Komplexität ungefähr O (k / n), wobei n die Anzahl der Prozessoren ist.

    
Tagir Valeev 14.04.2016, 06:57
quelle
3

Wie Louis anmerkt, ist skip bei unsortierten Streams nicht wirklich sinnvoll, tatsächlich ist es derzeit (jdk 1.8) so implementiert, dass die folgende Methode das Überspringen unter bestimmten Umständen optimiert:

%Vor%

Dies ist gültig, weil es der Quellsammlung in einer anderen Reihenfolge einfach entspricht.

    
the8472 14.04.2016 06:44
quelle