为 HashMap 的对象列表生成 HashCode

发布于 2025-01-19 17:10:03 字数 658 浏览 1 评论 0原文

我发现当我们将一个对象作为键插入到 Map 中时,它的哈希代码就会生成。但如果我的键是对象列表,在这种情况下,它是列表中所有对象的哈希码的总和吗?

User user1 = new User(13, "Ron", "[email protected]");
User user2 = new User(15, "Kamden", "[email protected]");
List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
Map<List<User>, User> userMap = new HashMap<>();
userMap.put(userList, user1);

我该如何理解这一点?

I got that when we insert an object into a Map as Key, its hash code gets generated. But if my key is list of objects, in that case, is it the sum of all the Hash Code of objects in the list ?

User user1 = new User(13, "Ron", "[email protected]");
User user2 = new User(15, "Kamden", "[email protected]");
List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
Map<List<User>, User> userMap = new HashMap<>();
userMap.put(userList, user1);

How can I understand this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

人疚 2025-01-26 17:10:03

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

列表的哈希码定义为以下计算的结果:

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

That's actually specified in the JavaDoc.
The ArrayList javadocs tells you to look at the implementation in AbstractList, and AbstractList.hashCode() says the implementation is the same as in List.hashCode which gives this definition

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());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文