List包含对象的方法

时间:2014-01-19 20:43:38

标签: java list

我试图理解contains()以及Object类

的equals和hashCode方法

以下是我的课程Test1

public class Test1 {

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((favoriteUID == null) ? 0 : favoriteUID.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof Test1)) {
            return false;
        }
        Test1 other = (Test1) obj;
        if (favoriteUID == null) {
            if (other.favoriteUID != null) {
                return false;
            }
        } else if (!favoriteUID.equals(other.favoriteUID)) {
            return false;
        }
        return true;
    }

    private String favoriteUID;

    public String getFavoriteUID() {
        return favoriteUID;
    }

    public void setFavoriteUID(String favoriteUID) {
        this.favoriteUID = favoriteUID;
    }
}

那是我的主要课程

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class FavoriteMain 
{

    public static void main(String[] args) 
    {

        Test1 obj1 = new Test1();
        obj1.setFavoriteUID("1");

        Test1 obj2 = new Test1();
        obj2.setFavoriteUID("1");

        List<Test1> list1 = new ArrayList<Test1>();
        list1.add(obj1);
        list1.add(obj2);

        List<Test1> list2 = new ArrayList<Test1>();
        list2.add(obj1);

        System.out.println(obj1.equals(obj2 ));
        System.out.println(list1.contains(list2));
}
}

输出

true
false

我是嗡嗡声,为什么我变得虚假,即使我的hashCode和equals方法正常工作。这就是为什么我的equals方法返回true的原因。

任何输入都会有所帮助。

谢谢!!!

1 个答案:

答案 0 :(得分:2)

因为contains(Object o);将在列表中查找对象,为了返回true,您需要添加列表本身,这没有多大意义。如果您改为使用list1.contains(obj1);,那么您将得到真实,因为该实际对象存在于列表中。

您可以使用containsAll(Collection<?> c);来获取列表,并检查提供的列表中的所有元素是否都存在于被调用的列表中。