나는 ConcurrentSkipListMap
입니다. 나는 key
보다 낮은 요소를 제거해야합니다. 여기ConcurrentSkipListMap에서 키를 지정할 요소를 제거하는 방법?
내가 그것을 수행 할 수있는 방법입니다
private ConcurrentNavigableMap<Double, MyObject> myObjectsMap = new ConcurrentSkipListMap<>();
//...
myObjectsMap = myObjectsMap.tailMap(10.25, false);
확인을 보이는
, 그러나 나는 이러한 사실에 대해 혼란 스러워요 :1.
반환되는 맵은이 맵에 연동 따라서 반환 된지도 의 변경 사항이이지도에 반영되며 그 반대의 경우도 마찬가지입니다.
이전 값이 가비지 수집기에서 제거되지 않는다는 의미입니까?
즉, 우리는 이전지도를 제거하고 이제는 새로운지도를 얻습니다. 그러나이 새지도는 이전지도에 의해 뒷받침됩니다. 그러면 오래된지도는 어떻게됩니까? 그것이 제거되거나 영원히 기억에 남을 것인가?
2.
반환지도
은, 그 범위 외의 키가 삽입하려는 시도 에 IllegalArgumentException를 throw합니다.
이제 10.25보다 작고 마지막 최대 값보다 큰 새 키를 넣을 수 없습니까?
혼란스러워. 그렇다면 정확히 어떻게 ConcurrentSkipListMap에서 요소를 제거해야합니까?
헤드 내용을 새로운 맵으로 복사하는 것이 가장 안전하지 않을까요?'myObjectsMap = new ConcurrentNavigableMap <> (myObjectsMap.headMap (10.25, false)); ' –