热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Java中返回Hashset中的对象-ReturningaObjectinaHashsetinJava

HiIhaveaHashSetlikethefollowinginaclasscalledMemory:嗨,我在一个名为Memory的类中有如下的HashSet:Set&

Hi I have a HashSet like the following in a class called Memory:

嗨,我在一个名为Memory的类中有如下的HashSet:

Set ideas = new HashSet();

The generic type "Idea" is another class I wrote that has hashcode() and equals() overriden. I want to be able to get(and not remove) an Idea object in the HashSet ideas, then change it by adding something to it possibly changing it's hashcode() return value. I heard that this is would not work but no one explained why. I was wondering if someone could tell me how I can do this most efficiently.

泛型类型“Idea”是我编写的另一个类,它具有hashcode()和equals()覆盖。我希望能够在HashSet中获取(而不是删除)一个Idea对象,然后通过添加一些东西来改变它,可能会改变它的hashcode()返回值。我听说这不行,但没有人解释原因。我想知道是否有人能告诉我如何才能最有效地做到这一点。

3 个解决方案

#1


1  

If you want to perform a lookup, you should be using a Map. If you want to change the key (or an element of a Set) you have to remove it first and add it again. For this reason your key should only have immutable fields.

如果要执行查找,则应使用Map。如果要更改键(或Set的元素),则必须先将其删除并再次添加。因此,您的密钥应该只有不可变字段。

#2


2  

HashSet internally uses HasMap with value same as the key.For putting an object to Hashset, jvm fill first calculate the hashcode of the object and based on that hashcode, corresponding bucket is selected and object is put.So if you are changing the hashcode after putting the object into hashset,you wont be able to get its location correctly.So if you really want to remove the element, better remove the object from hashset change its value and then put it back again

HashSet在内部使用HasMap,其值与key相同。为了将对象放入Hashset,jvm fill首先计算对象的hashcode,并根据该hashcode,选择相应的bucket并放置对象。如果你要更改hashcode之后将对象放入hashset,你将无法正确获取其位置。如果你真的想要删除元素,最好从hashset中删除对象更改其值,然后再将其重新放回

#3


1  

It wont work because the hashcode is the key to find the object, if you modify the object in such a way you change it's hashcode you won't be able to find it again.

它不会工作,因为哈希码是查找对象的关键,如果以这种方式修改对象,则更改它的哈希码,您将无法再次找到它。

It is like the entry in a dictionary, if you change it you won't find it again. Does it makes sense?

它就像字典中的条目,如果你改变它,你将不会再找到它。这有道理吗?


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 这篇文章主要介绍“.NET中的HashSet原理是什么”,在日常操作中,相信很多人在.NET中的HashSet原理是什么问题上存在疑惑,小编查阅了各式资料,整 ... [详细]
  • 如何解决《为什么我不能使用HashSet<string>来实现IEnumerable<string>接口属性?》经验,为你挑选了1个好方法。 ... [详细]
  • 如何解决《JavaHashSet包含无法正常工作的函数》经验,为你挑选了1个好方法。 ... [详细]
  • 如何解决《为什么我会在字典上使用HashSet?》经验,为你挑选了2个好方法。 ... [详细]
  • HashSet and HashMap
    HashSetandHashMap总体介绍之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说HashS ... [详细]
  • 如何解决《使用Dictionary和HashSet的GetHashCode方法》经验,为你挑选了1个好方法。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
author-avatar
GRIROR格雷尔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有