100個の要素のリストが与えられたら、 要素をリストから取り除くと、どの要素が削除されたのですか?コレクションフレームワークのリスト内の要素を見つける方法
私はインタビューの1つでこの質問をしました。あなたがコレクションbefore
とafter
要素の削除の内容に異なるの参照を与えられている場合は、コマンド
before.removeAll(after);
は、削除された1すなわち、ただ一つの要素でbefore
を残すだろうと仮定すると
100個の要素のリストが与えられたら、 要素をリストから取り除くと、どの要素が削除されたのですか?コレクションフレームワークのリスト内の要素を見つける方法
私はインタビューの1つでこの質問をしました。あなたがコレクションbefore
とafter
要素の削除の内容に異なるの参照を与えられている場合は、コマンド
before.removeAll(after);
は、削除された1すなわち、ただ一つの要素でbefore
を残すだろうと仮定すると
残りの要素は削除された要素と等しくありません。
そうでない場合は、削除が行われている方法に応じて、あなたは、インデックス付きの削除(List
の例えば、サブクラス)をサポートするコレクションのいずれかのパラメータとして、remove(element)
またはremove(elementIndex)
の戻り値として除去する要素を取得します。
新しいコレクションと古いコレクションが指定されている場合、最も簡単な仕組みは新しいコレクションの各アイテムを古いコレクションから削除することです。残っているのは両者の違いです。 Javaの8で例えば
、:
newCollection.stream().forEach(oldCollection::remove);
それは削除サポートするすべてのコレクションのために働く必要がありますので、stream
とremove
方法はCollection
インタフェースの両方であるので、これは動作します。 newCollection
の各アイテムに対してremove
が一度呼び出されるため、重複するアイテムに役立つそれぞれのインスタンスが1つだけ削除されます。
remove
がコレクションでサポートされていない場合は、簡単な解決策は、このメソッドを使用する前に、新しいコピーを作成することです(例えばnew ArrayList<>(oldCollection)
):
あなたは、特にあなたができるその後、インデックス付きのコレクションに一つの項目を探しているなら
IntStream.range(0, oldCollection.size())
.filter(n -> n >= newCollection.size()
|| !oldCollection.get(n).equals(newCollection.get(n)))
.findFirst();
これは何のアイテムが削除されていないいる状況を可能にするためにOptional
を返します。ちょうどはるかに安価であると一致しない最初のものを探してください。
彼らは100個のint要素を与え、コレクションから1個のintを削除すると仮定します。 100要素に対してsum()を、99要素に対してもう1つのsum()を実行することができます。次に、2つの合計の間で減算を行うと、コレクションから削除された要素が取得されます。
これはコレクションが数値である場合にのみ回答します(私は間違った質問を読んでいるかもしれませんが、数値が指定されたとは思わないかもしれません) –
@BenedictLewis質問自体は不明です。それは私が "仮定する"という言葉を使用していた理由です。 –
元のリストだけでなく、要素が削除されたリストも指定されていますか? –
重複していますか? https://stackoverflow.com/questions/919387/how-can-i-calculate-the-difference-between-two-arraylists –
'List'はAPI仕様に従って注文されています...もし' List'、 '' 'after'は本当に' List :: 'before ::' List :: remove'を介して一つの要素を削除した 'List''、' before'です。これを繰り返すだけで、 'before.get(i)!= after.get( i) '。 – user2478398