2
WeakHashMap에 일부 데이터를 저장하려고하지만 문제가 있습니다. 우리가 코드를 가지고 말 :Java WeakHashMap 항목이 검사 후 사라지지 않는다고 보장 할 수 있습니까?
public class WeakMapTest {
public static void main(String[] args) {
WeakHashMap<Object, Object> map = new WeakHashMap<Object, Object>();
map.put(null, 0);
map.put(new Integer(1), null);
map.put(new Integer(2), 2);
System.out.println(map.get(new Integer(2)));
System.gc(); //assume this call made implicitly by JVM
if (map.containsKey(new Integer(2))) {
System.out.println(map.get(new Integer(2)));
} else {
System.out.println("Key is deleted");
}
}
}
출력이 논리적이다
2
Key is deleted
될 것입니다.
그러나이 다른 경우입니다 :
if (map.containsKey(new Integer(2))) {
System.gc(); //assume this call made implicitly by JVM
System.out.println(map.get(new Integer(2)));
} else {
System.out.println("Key is deleted");
}
은 결과가 좋지 않다 :
나는 그런 잘못된 결과를 피할 수있는 방법2
null
? 값과 키는 null 일 수 있습니다.
귀하의 솔루션이 정확하게 최적이 아닙니다. 당신은'Object value = map.get (new Integer (2)); if (value! = null) System.out.println (value);'. 게다가, "잘못된 결과"가 없습니다. 'WeakHashMap'을 수집하고 싶지 않으면 잘못 사용하고 있습니다. – Kayaman
값이 null 일 수 있다고 명시 적으로 말했기 때문에 최적화가 내 경우에는 효과가 없을 것입니다. 나는 그것들을 (OutOfMemory를 막기 위해) 수집하기를 원하지만, 'get'함수를 사용할 때 null이 원래 객체인지, 아니면 가비지 수집되었는지는 알 수 없다. – DeGriz
@Kayaman 'null'값이 허용되는 경우 'null'과 비교하는 것은 좋은 생각이 아닙니다. – assylias