Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
...
以下の操作の複雑さはどのくらいですか? O(n)またはO(1)?HashSetから取得されるストリームフィルタの複雑さはどのくらいですか?
set.stream().filter(e -> e == 1).findFirst();
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
...
以下の操作の複雑さはどのくらいですか? O(n)またはO(1)?HashSetから取得されるストリームフィルタの複雑さはどのくらいですか?
set.stream().filter(e -> e == 1).findFirst();
あなたが他の側からそれを見れば、あなたのソリューションは、このように同じであるそれをよりよく理解することができます:
for(Integer i : set){
if(i == 1){
break;
}
}
だから、それをすべてセットをループし、チェックなぜならO(n)
です1つずつ、条件が正しい場合は、値を返します。n
elsement
Stream
インスタンスを作成した後は、O(n) - です。 HashSet
で動作していませんが、ソースSet
のすべての要素を経由するStream
で動作しています。
それはすべての要素を一つずつ訪問している怠惰な線状配列だ - それゆえO(n)の
私は強く、このような場合にアンボクシングに依存しないことをお勧めしたいです。あなたの比較は 'e.intValue()== 1'と同等です。これは問題ありません。同様のケースでは、私はもう正確にリコールすることはできません、代わりにボクシングが起こったので、 '=='を使って2つのオブジェクトを比較していました。 – maaartinus