2017-08-18 5 views
1
Set<Integer> set = new HashSet<>(); 
set.add(1); 
set.add(2); 
... 

以下の操作の複雑さはどのくらいですか? O(n)またはO(1)?HashSetから取得されるストリームフィルタの複雑さはどのくらいですか?

set.stream().filter(e -> e == 1).findFirst(); 
+0

私は強く、このような場合にアンボクシングに依存しないことをお勧めしたいです。あなたの比較は 'e.intValue()== 1'と同等です。これは問題ありません。同様のケースでは、私はもう正確にリコールすることはできません、代わりにボクシングが起こったので、 '=='を使って2つのオブジェクトを比較していました。 – maaartinus

答えて

1

あなたが他の側からそれを見れば、あなたのソリューションは、このように同じであるそれをよりよく理解することができます:

for(Integer i : set){ 
    if(i == 1){ 
     break; 
    } 
} 

だから、それをすべてセットをループし、チェックなぜならO(n)です1つずつ、条件が正しい場合は、値を返します。n elsement

1

Streamインスタンスを作成した後は、O(n) - です。 HashSetで動作していませんが、ソースSetのすべての要素を経由するStreamで動作しています。

それはすべての要素を一つずつ訪問している怠惰な線状配列だ - それゆえO(n)の