"이 클래스는 주로 == 연산자를 사용하여 개체 식별하기위한 방법 시험 동일 키 오브젝트와 함께 사용하도록되어 이러한 키가 삭제되면 WeakHashMap에서 해당 키의 조회를 수행하는 것은 불가능합니다. "
weakhashmap에서 항목 0의 키로 objectA를 사용하고 나중에 해당 항목을 제거하면 testMapHashWeak.remove(objectA);
다른 항목에 동일한 키 objectA
을 사용할 수 없습니까? 내가 작은 테스트를 만든 한 원인 내가 할 수
public void test4WeakHashMap(WeakHashMap<B, String> testMapHashWeak) {
B objectB = new B();
String sTest = "hola";
System.out.println("1st time - key&value inserted ->"+objectB+","+sTest);
testMapHashWeak.put(objectB, sTest);
System.out.println("Get element 1st time-> "+testMapHashWeak.get(objectB));
testMapHashWeak.remove(objectB);
//Insert 2nd time
System.out.println("2st time - key&value inserted ->"+objectB+","+sTest);
testMapHashWeak.put(objectB, sTest);
System.out.println("Get element 2nd time-> "+testMapHashWeak.get(objectB));
}
는 출력되는 :
1st time - key&value inserted ->[email protected],hola
Get element 1st time-> hola
2st time - key&value inserted ->[email protected],hola
Get element 2nd time-> hola
귀하의 진술은 정확하지만 귀하의 예는 아닙니다.문제는 문자열 상수''key "'*를 포함하고있는 key1과 key2가 동일한 인스턴스 (assertions를 사용하면 좋다, 어설 션을 활성화 한 코드를 실행하는 것이 더 좋다)이다. Java는 동일한 객체 인스턴스를 사용하여 컴파일 타임 상수 문자열을 나타냅니다. 그 중 하나를'new String ("key")로 바꾸면 서로 다른 String 인스턴스가 동일한 상황을 만들 수 있습니다. – Holger
수정 제안을 편집 한 코드 예제입니다. – Holger
원본 코드가 손상되었지만 편집이 거부되었습니다. 제안 된 수정이 원래의 의도를 유지함에 따라 그 이유를 이해할 수 없습니다. 그러나 사실, 첫 번째 어설 션이 실패한 것 외에도 key3 및 key4 객체를 만든 후 어설 션은 key1 및 key2 대신에 이들을 참조해야합니다. 원래 포스터 만이 해당 코드를 수정할 수 있습니다. – Holger