根据weakhashmap的Java文档:“此类主要用于其equals方法使用==运算符测试对象标识的键对象。一旦丢弃了这样的键,就永远无法重新创建它,因此无法在WeakHashMap中查找该键”这是否意味着如果我们将objectA用作weakhashmap中条目0的键,然后在以后删除该条目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 ->B@634e3372,holaGet element 1st time-> hola2st time - key&value inserted ->B@634e3372,holaGet element 2nd time-> hola 最佳答案 说明: 此类主要用于具有以下特征的关键对象: 等于方法使用==运算符测试对象标识。一旦 这样的密钥将被丢弃,永远无法重新创建,因此这是不可能的 在WeakHashMap中查找该键表示该类旨在与键一起使用,在相互比较之后,重新创建(创建完全相同的新实例)后,键将返回false。换句话说,此类键的每个新实例都是唯一的(与自己使用equals()进行比较时,仅返回true;与任何其他实例/对象进行比较时,则返回false)例如,String不是此类,而是:WeakHashMap testMapHashWeak = new WeakHashMap<Object, String>();String value1 = "Hola1!";String value2 = "Hola2!";String key1 = new String("key");String key2 = new String("key");assert key1 != key2; // Keys are different objects...assert key1.equals(key2); // but are equal to each othertestMapHashWeak.put(key1, value1);testMapHashWeak.put(key2, value2);// value2 instead of value1!System.out.println("Get using key1 (expected Hola1): "+testMapHashWeak.get(key1));// value2System.out.println("Get using key2 (expected Hola2): "+testMapHashWeak.get(key2));Object key3 = new Object();Object key4 = new Object();assert key3 != key4; // Keys are different objects...assert !key3.equals(key4); // and are not equal to each othertestMapHashWeak.put(key3, value1);testMapHashWeak.put(key4, value2);// value2 instead of value1!System.out.println("Get using key3 (expected Hola1):"+testMapHashWeak.get(key3)); // value1!// value2System.out.println("Get using key4 (expected Hola2):"+testMapHashWeak.get(key4));Object是具有弱键的Map的实现。因此,在键将被垃圾回收之后,映射中的整个条目(键,值)将消失。然后,此处的关键字是“之后”,这意味着没有任何时间可以提前。因此,在键之间被标记为“将由GC删除”,并且在实际删除键之前,映射将包含键值条目,该键值条目应无法获得。在使用基于字符串的键的第一个示例中,可以使用其他键获取值,但是您无法预测该值是否存在(可能已经是GCd)。在第二个示例中,无论如何都无法做到。 10-08 13:04