私はConcurrentSkipListMap
です。私はkey
以下の要素を削除する必要があります。ここでConcurrentSkipListMapのキーとなる要素を削除するには?
は、私はそれを行うことができる方法です。
private ConcurrentNavigableMap<Double, MyObject> myObjectsMap = new ConcurrentSkipListMap<>();
//...
myObjectsMap = myObjectsMap.tailMap(10.25, false);
はOKに見えますが、私はこれらの事実について混乱しています:
1.
返されるマップはこのマップに連動しています、返されたマップ の変更はこのマップに反映され、その逆もあります。
古い値がガベージコレクタによって削除されないことを意味しますか?
I.古い地図を削除しました。新しい地図が作成されました。しかし、この新しい地図は古い地図に裏付けられています。では、古い地図はどうなりますか?それは取り除かれるのか、それとも永遠に記憶に残るのだろうか?
2.
返されるマップは、その範囲外のキーを挿入しようとする試み にIllegalArgumentExceptionをスローします。
これで、10.25未満で最後の最大値よりも新しい新しいキーを挿入することはできません。
私は混乱しています。どのように正しく私はConcurrentSkipListMapから要素を削除する必要がありますか?
ヘッドの内容を新しいマップにコピーするのが最も安全ではないでしょうか? 'myObjectsMap = new ConcurrentNavigableMap <>(myObjectsMap.headMap(10.25、false));' –