package feng.c7;import java.util.HashMap;class A2 {
private int count; public A2() {
} public A2(int count) {
this.count = count;
} @Override
public int hashCode() {
// TODO Auto-generated method stub
return this.count;
} @Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if (obj instanceof A2) {
A2 a = (A2) obj;
if (a.count == this.count) {
return true;
}
}
return false;
}
}class B2 {
@Override
public boolean equals(Object obj) {
return true;
}}public class TestHashMap2 {
public static void main(String[] args) {
HashMap hm = new HashMap();
hm.put(new A2(5675), new B2());
hm.put(new A2(60000), "JAVA");
hm.put(new A2(87563), "PHP");
System.out.println(hm);
System.out.println(hm.containsKey(new A2(121)));
System.out.println(hm.containsKey(new A2(5675)));
System.out.println(hm.containsValue("C++")); }
}最后一个不是应该输出true吗?为何程序运行后结果是false?

解决方案 »

  1.   

    你里面没有C++当然是false呀。
      

  2.   

    同一楼,二楼,你没有向HashMap添加“c++”,结果肯定是false撒
      

  3.   

    你多加一句 hm.put(new A2(87563), "C++"); 就对啦!
    摘自javadoc:
    boolean containsValue(Object value)
    如果此映射为指定值映射一个或多个键,则返回 true。更正式地说,当且仅当此映射至少包含一个 v 的以下映射关系时才返回 true:(value==null ? v==null : value.equals(v))。对于大多数 Map 接口的实现而言,该操作可能需要与映射大小呈线性关系的时间。
    参数:
    value - 测试在该映射中是否存在的值。
    返回:
    如果该映射将一个或多个键映射到指定值,则返回 true。
    抛出:
    ClassCastException - 如果该值对于此映射是不合适的类型(可选)。
    NullPointerException - 如果该值为 null 并且此映射不允许 null 值(可选)。