Java entrySet()返回的集合上的contains()和remove()的行为

Java entrySet()返回的集合上的contains()和remove()的行为,java,collections,java-7,entryset,Java,Collections,Java 7,Entryset,我有以下代码。为什么包含和删除返回false Map<Integer, String> p = new TreeMap(); p.put(1, "w"); p.put(2, "x"); p.put(3, "y"); p.put(4, "z"); System.out.println(p);// {1=w, 2=x, 3=y, 4=z} Set s = p.entrySet(); System.out.println(s)

我有以下代码。为什么包含和删除返回false

    Map<Integer, String> p = new TreeMap();
    p.put(1, "w");
    p.put(2, "x");
    p.put(3, "y");
    p.put(4, "z");
    System.out.println(p);// {1=w, 2=x, 3=y, 4=z}
    Set s = p.entrySet();
    System.out.println(s);// [1=w, 2=x, 3=y, 4=z]
    System.out.println(s.contains(1));//false
    System.out.println(s.remove(1));//false
    System.out.println(p);// {1=w, 2=x, 3=y, 4=z}
    System.out.println(s);// [1=w, 2=x, 3=y, 4=z]
Map p=newtreemap();
p、 put(1,“w”);
p、 将(2,“x”);
p、 put(3,“y”);
p、 将(4,“z”);
System.out.println(p);//{1=w,2=x,3=y,4=z}
Set s=p.entrySet();
System.out.println(s);//[1=w,2=x,3=y,4=z]
系统输出println(s.contains(1))//假的
系统输出println(s.remove(1))//假的
System.out.println(p);//{1=w,2=x,3=y,4=z}
System.out.println(s);//[1=w,2=x,3=y,4=z]
entrySet()返回实例的
集。因此,您的查找失败,因为类型为
Map的对象。Entry
永远不能等于
Integer
的实例

您应该注意通用签名,即

Map<Integer, String> p = new TreeMap<>();
p.put(1, "w");
p.put(2, "x");
p.put(3, "y");
p.put(4, "z");
System.out.println(p);// {1=w, 2=x, 3=y, 4=z}

Set<Map.Entry<Integer, String>> s = p.entrySet();
System.out.println(s);// [1=w, 2=x, 3=y, 4=z]

Map.Entry<Integer, String> entry = new AbstractMap.SimpleEntry<>(1, "foo");
System.out.println(s.contains(entry)); // false (not containing {1=foo})

entry.setValue("w");
System.out.println(s.contains(entry)); // true (containing {1=w})
System.out.println(s.remove(entry));// true
System.out.println(p);// {2=x, 3=y, 4=z}
System.out.println(s);// [2=x, 3=y, 4=z]
为完整起见,请注意
Map
的第三个集合视图
values()
。根据实际操作,选择正确的视图可以大大简化操作。

entrySet()
返回实例的
集。因此,您的查找失败,因为类型为
Map的对象。Entry
永远不能等于
Integer
的实例

您应该注意通用签名,即

Map<Integer, String> p = new TreeMap<>();
p.put(1, "w");
p.put(2, "x");
p.put(3, "y");
p.put(4, "z");
System.out.println(p);// {1=w, 2=x, 3=y, 4=z}

Set<Map.Entry<Integer, String>> s = p.entrySet();
System.out.println(s);// [1=w, 2=x, 3=y, 4=z]

Map.Entry<Integer, String> entry = new AbstractMap.SimpleEntry<>(1, "foo");
System.out.println(s.contains(entry)); // false (not containing {1=foo})

entry.setValue("w");
System.out.println(s.contains(entry)); // true (containing {1=w})
System.out.println(s.remove(entry));// true
System.out.println(p);// {2=x, 3=y, 4=z}
System.out.println(s);// [2=x, 3=y, 4=z]
为完整起见,请注意
Map
的第三个集合视图
values()
。根据实际操作,选择正确的视图可以显著简化操作