为 HashMap 的对象列表生成 HashCode

Generation of HashCode for list of Objects for HashMap

我了解到,当我们将对象作为键插入到 Map 中时,会生成其哈希码。但是,如果我的键是对象列表,那么它是列表中所有对象的哈希码的总和吗?

User user1 = new User(13, "Ron", "ron@gmail.com");
User user2 = new User(15, "Kamden", "kamden@gmail.com");
List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
Map<List<User>, User> userMap = new HashMap<>();
userMap.put(userList, user1);

我怎么理解这个?

这实际上是在 JavaDoc 中指定的。 ArrayList javadocs 告诉您查看 AbstractList 中的实现,并且 AbstractList.hashCode() 表示实现与 List.hashCode 中的实现相同,它给出了这个定义

The hash code of a list is defined to be the result of the following calculation:

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