Java 将0作为哈希代码返回安全吗

Java 将0作为哈希代码返回安全吗,java,hashcode,Java,Hashcode,我有一个类,它有一个文章列表(或者你想要什么)。在该类中实现/重写hashCode()函数是否安全,如下所示: class Place{ List <Article> list = new List<Article>(); public int hashCode() { if(list.isEmpty()) return 0; //is it safe to return 0 else

我有一个类,它有一个文章列表(或者你想要什么)。在该类中实现/重写
hashCode()
函数是否安全,如下所示:

class Place{
    List <Article> list = new List<Article>();

    public int hashCode() {
        if(list.isEmpty())
            return 0; //is it safe to return 0
        else
            return list.get(0).hashCode();
    }
}

public class Main{
    private HashSet<Place> places = new HashSet<>();

    //this function must be donne like this
    public boolean isArticleIn(Article article){
        Place place = new Place();
        place.add(article);
        return places.contains(place);
    }
}
上课地点{
列表=新列表();
公共int hashCode(){
if(list.isEmpty())
返回0;//返回0是否安全
其他的
return list.get(0.hashCode();
}
}
公共班机{
private HashSet places=new HashSet();
//这个函数必须是这样的
公共布尔isArticleIn(文章){
地点=新地点();
添加(第条);
返回地点。包含(地点);
}
}

是否有可能使列表不为空并返回0。

这是安全的。它是不变的,这很好


但是,您的散列集合将无法执行,因为您没有提供均匀分布的散列代码范围,因此您的散列总体不会均匀分布。请参阅。

它是安全的。它是不变的,这很好


但是,您的散列集合将无法执行,因为您没有提供均匀分布的散列代码范围,因此您的散列总体不会均匀分布。请参阅。

如果要在使用哈希代码的容器中存储类的对象,则应确保(否则容器可能存储重复项/通常会混淆)。如果类中的对象都有一个空列表,那么它们之间的比较是否相等


关于如何实现equals和hashcode以便它们捕获您想要的所有信息,同时保持一致性的最佳建议是(建议使用ApacheCommonsLang库中的EqualsBuilder和HashCodeBuilder)。似乎列表中的所有元素都应该对哈希代码起作用-毕竟,如果列表中的第二个或第三个元素不同,那么对象将从“等于”返回false-对吗?

如果要将类的对象存储在使用哈希代码的容器中,那么应该确保(否则容器可能会存储重复项/通常会混淆)。如果类中的对象都有空列表,它们之间的比较是否相等


关于如何实现equals和hashcode以便它们捕获您想要的所有信息,同时保持一致性的最佳建议是(建议使用ApacheCommonsLang库中的EqualsBuilder和HashCodeBuilder)。似乎列表中的所有元素都应该对哈希代码起作用-毕竟,如果列表中的第二个或第三个元素不同,那么对象将从“等于”返回false-对吗?

0
与任何其他元素一样是哈希代码,因此是的,这是安全的。但您只需要fi的哈希代码是正常的吗否则列表的第一个元素?如果两个列表有相同的文章,那么它们是相等的。不是我做了这个概念。你的意思是列表只能有一个元素吗?如果是,为什么不使用
list.hashCode()
?上面的代码似乎很好,因为它符合合同的规定。您在代码中尝试过吗?您遇到了什么错误?
0
与其他任何代码一样是散列代码,因此是的,这是安全的。但是,您只需要列表中第一个元素的散列代码,否则正常吗?如果两个列表具有相同的文章,则它们是相等的所以是的。不是我做了这个概念。你的意思是列表只能有一个元素吗?如果是,为什么不直接使用
list.hashCode()
?上面的代码似乎很好,因为它遵循合同
。你试过代码了吗?你遇到了什么错误?