2017-03-17 65 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