相同对象的两个列表具有不同的哈希码

问题描述 投票:0回答:1
作为键,将

GraphLayer

对象作为值:

HashMap<String, GraphLayer>

。 Graphlayer对象具有两个类型的自定义成员。 
PaperMetaData
由一些原始类型的成员和
ConferenceSerieAndInstance
的成员组成。作者仅包含原始的字符串成员以及隶属关系。 
PaperMetaData
还包含普通的字符串成员和类型
String
的成员,其中类会议上只有Conatins字符串成员。 
我希望,到目前为止,一切都清楚了。

我从每个数据库中读取了我的信息,然后将其存储在数据库中的每个hashmap中。之后,我将列表中的每个地图转换。到目前为止还不错,但是列表中对象的顺序是不同的(以及在我转换地图之前的地图中)。从hashmap到arraylist的演员表看起来像这样。
HashMap<Author, Set<Affiliation>>
但两个列表都包含相同的对象。如果我调用每个列表的方法
ConferenceSerieAndInstance
,我会得到不同的哈希代码。

我不明白为什么要获得不同的哈希码。根据Java文档,将像这样创建列表的哈希码。
HashMap<String, ConferenceInstance>
因此,列表中项目的顺序不应发挥作用。如果我使用带有原始数据类型的列表(例如字符串)尝试它,则它将起作用,但与我的自定义数据类型无效。 

没有人知道为什么它不起作用?

I还将列表中的

public List<GraphLayer> searchAuthor() { ... return (List<GraphLayer>) new ArrayList<GraphLayer>(graph.values()); }
hashCode()

的成员的每个哈希码与列表2中的成员的哈希码进行了比较。而且没有区别。但是,如果我比较完整列表的哈希码,则存在差异。我不知道为什么。我无助

也许有人可以帮助我。最好的问候,预先感谢。
    

您的回答在这里躺在这里

到目前为止很好,但是列表中对象的顺序是不同的
  (以及在我转换地图之前的地图中)。

int hashCode = 1; for (E e : list) hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());


  
[...]如果两个列表在
  相同的顺序

@samikuhmonen

的dedit
java list hash hashmap hashcode
1个回答
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.