(申し訳ありませんが、私は間違っているスタック交換にこの質問を置く場合、この質問は、どこか別の場所に行く必要がある場合、私は...それを再投稿します。注)対forループ入れ子テクノロジー会社で初めてのインターンシップを始めたばかりで、コードのパフォーマンスやコーディングの実践について尋ねたいと思っていました。上級開発者がコードを書いていますが、パフォーマンスに関しては私には当てはまらないようですが、経験がないか、それが彼のものかどうかはわかりません。 パフォーマンス/ readibility:</p> <p>I:HashMapの
は、ここで私が見ているコードです:// Given the following:
List<TypeA> aList = (...)
List<TypeB> bList = (...)
for(TypeA obj : aList) {
boolean found = false;
for(TypeB obj2 : bList) {
if(obj.name.equals(obj2.name) {
found = true;
break;
}
}
if(!found) {
obj.doSomething();
someOtherList.add(obj);
}
}
私の考えは、forループネストされたOは、(N^2)コードがやろうとしているもののため、かなり非効率的であるということです。このようなことをした方がよいでしょうか? (また、私はその場でこれを入力するよ、構文エラーを気にしないでください;)):
// Given the following:
List<TypeA> aList = (...)
List<TypeB> bList = (...)
Map<TypeB, String> bListToName = new HashMap<>()
bList.forEach(obj -> bListToName.put(obj, obj.name));
for(TypeA obj : aList) {
if(bListToName.get(obj.name) == null) {
obj.doSomething();
someOtherList.add(obj);
}
}
私の推論ではなく、forループのネストされたの、私は2つのO(n)のループを使用することです適切なマージンでパフォーマンスを改善する必要があります。特に、当社のa/bListsが十分に大きいか、十分に頻繁に使用されている場合は特にそうです。
洞察や考えがあれば、大変感謝します。