当前位置: 首页 > 知识库问答 >
问题:

为什么HashSet说它不包含这个对象?[重复]

纪实
2023-03-14

我试图打印包含,但是,HashSet没有检测到整数[]值。这和它被引用有关系吗?如果我不想将实际的整数[]对象传递给方法的参数,我如何克服这个问题?

import java.util.*;

public class passByReference2{
    public static void method(HashSet<Integer[]> visited){
        Integer[] n = {1, 2};
        if (visited.contains(n)){
            System.out.println("Contains");
        }
    }

    public static void main(String[]args){
        HashSet<Integer[]> visited = new HashSet<Integer[]>();
        Integer[]v = {1, 2};
        visited.add(v);
        method(visited);
    }


}

共有2个答案

红鸿运
2023-03-14

在Java中,默认的hashCode实现是使用对象的地址。

这通常是通过将对象的内部地址转换为整数来实现的,但JavaTM编程语言不需要这种实现技术。)

hashCode()javadocs

姜乐家
2023-03-14

这是因为数组不以比较元素的方式实现hashCode——事实上,数组根本不重写hashCode(或等于),所以使用对象的实现。

数组的hashCodeequals纯粹基于标识。

如果要“克服”它,请使用一种基于元素值计算hashCodeequals的类型,例如ArrayList

 类似资料:
  • 为什么这个文件本身? https://github.com/powturbo/TurboPFor-Integer-Compression 简单的

  • 问题内容: 我可以从Google那里收集到的是: Hibernate使用代理对象来实现延迟加载。当我们请求从数据库中加载对象,并且获取的对象具有对另一个具体对象的引用时,Hibernate返回一个代理而不是具体的关联对象。 Hibernate使用字节码检测(由Javassist提供)创建代理对象。Hibernate在运行时使用代码生成库创建我们的实体类的子类,并将实际对象替换为新创建的代理。 那么

  • 我能从谷歌得到的信息是: > Hibernate使用代理对象实现延迟加载。当我们请求从数据库加载对象,并且获取的对象引用了另一个具体对象时,Hibernate会返回一个代理,而不是具体的关联对象。 Hibernate使用字节码检测(由javhelp提供)创建代理对象。Hibernate在运行时使用代码生成库创建我们实体类的子类,并用新创建的代理替换实际对象。 那么,代理对象到底包含什么? 它是否包

  • if instr(str,"月")<0 then 请问不包含这样写为什么无效。 我希望不包含,该怎样写。 谢谢。

  • 问题内容: 我最近遇到了一个扩展名为.pid的文件,并在其中进行了探索,但没有发现太多。该文件说: Pid-File是一个包含进程标识号(pid)的文件,该文件存储在文件系统定义明确的位置,因此允许其他程序找出正在运行的脚本的pid。 任何人都可以对此进行更多说明,或指导我了解pid文件中包含的内容的详细信息吗? 问题答案: pid文件包含给定程序的进程ID(数字)。例如,Apache HTTPD

  • 问题内容: 作为程序员,我认为它们看起来像“地址为1a234552的java.lang.Object”或类似sin 它是否正确?因此,所有参考均固定大小吗? 问题答案: 尽管在许多VM上,引用的大小是本机指针大小(即32位JVM为32位,而64位JVM为64位),但不能保证-特别是HotSpot现在或不久将支持“ “压缩的糟糕”是在64位JVM中的32位引用。(这并不意味着每个参考都经过压缩-请阅