的複雜性我有這樣的代碼:時間流過濾器
List<Listing> Listings = new ArrayList<>();
Listings.add(listing1);
Listings.add(listing2);
...
...
...
Listing listing= listings.stream()
.filter(l -> l.getVin() == 456)
.findFirst();
我的問題是什麼是過濾過程的時間複雜度?如果是O(n),我的直覺就是將它轉換爲HashSet,就像數據結構一樣,這樣時間複雜度可能變成O(1),是否有一種優雅的方式可以通過流與流?
它可能是一個並行流,但複雜性仍然是O(n)。將它轉換爲一個過濾器操作的集合仍然是O(n),因此您需要首先使用集合。您可能想要使用LinkedHashset來保留插入順序,或使用TreeSet進行其他排序(列表意味着一些排序和/或允許重複)。 – Thomas
'Stream#filter'總是遍歷完整的'Stream'並將過濾標準應用於**每個元素**。一個優點是流可以很容易地被並行化,但是它只是通過一個常數因子(物理內核的數量)來減少時間複雜度。 – Zabuza