2017-03-17 63 views
0

我有一個映射,我試圖使用Java 8流檢索數據並使用謂詞篩選器。此代碼使用Java 8流和謂詞的時間複雜度

但我對代碼的複雜性有很大的懷疑。任何人都可以幫我弄清楚這段代碼的時間複雜性。

class Student{ 
    String id; 
} 
Multimap<Integer, String> map = HashMultimap.create(); 
    map.put(1, new Student("id1")); 
    map.put(2, new Student("id1")); 
    map.put(1, new Student("id2")); 
    map.put(1, new Student("id3")); 

// Time complexity of this ??? 
map.get(1).stream().filter(p -> p.getId().equals("id1")) 
        .collect(Collectors.toSet()); 
+0

您認爲複雜性*可能會是什麼? –

+1

我的猜測是O(n) – user1142317

+1

就我所見,該代碼是'O(1)',因爲沒有可變輸入。 –

回答

1

答案很簡單:你的代碼爲O(1),因爲你沒有指定一個終端操作和流是懶惰的評估。所以目前你的流代碼根本沒有流處理。

map.get(1)操作返回已經計算的Set。所以複雜性就是找到那個條目:O(1),就像其中一位評論員已經說過的那樣。

編輯後應該是O(n)。

但是,正如布賴恩所說的那樣思考正確的代碼而不是複雜性。

+0

但是在那個檢索的流中,我們正在做一個「過濾器」,在更糟糕的情況下可以通過所有條目是不是將會是一個O(n)操作? – user1142317

+4

不,你沒有一個終端操作像收集或左右。你應該提供一個「完整的」流語句。 – wumpz

+0

編輯了這個問題。增加了終端操作。 – user1142317