package en.hjw.test;public class MyMap {
MyEntry[] arr = new MyEntry[200];
int size;

public void put(Object key, Object value){
MyEntry e = new MyEntry(key, value);

for(int i=0; i<size; i++){
if(arr[i].key.equals(key)){
arr[i].value = value;
return ;
}
}
arr[size++] = e;
}

public Object get(Object key){
for(int i=0; i<size; i++){
if(arr[i].key.equals(key)){
return arr[i].value;
}
}
return null;
}

public boolean containsKey(Object key){
for(int i=0; i<size; i++){
if(arr[i].key.equals(key)){
return true;
}
}
return false;
}

public boolean containsValue(Object value){
for(int i=0; i<size; i++){
if(arr[i].value.equals(value)){
return true;
}
}
return false;
}

public static void main(String[] args) {
MyMap m = new MyMap();
m.put("小李", new Wife1("小花"));
m.put("张三", new Wife1("李四"));
Wife1 w = (Wife1) m.get("小李");
System.out.println(m.containsKey("张三"));
System.out.println(m.containsValue("李四"));//为什么会返回false??????
System.out.println(w.name);
}
}class MyEntry{
Object key;
Object value;

public MyEntry(Object key, Object value) {
super();
this.key = key;
this.value = value;
}
}class Wife1{
String name;

public Wife1(String name){
this.name = name;
}
}

解决方案 »

  1.   

    去看看String类的equals方法是怎么写的
      

  2.   

    m的value是一个Wife1对象  而不是李四可以重写Wife1的equals方法试试 public class Wife1 {
    String name; @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
    } @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    Wife1 other = (Wife1) obj;
    if (name == null) {
    if (other.name != null)
    return false;
    } else if (!name.equals(other.name))
    return false;
    return true;
    } public Wife1(String name){
    this.name = name;
    }
    }