【问题标题】:Java code using HashSet of longs doesn't work?使用长的 HashSet 的 Java 代码不起作用?
【发布时间】:2013-06-03 16:44:46
【问题描述】:

这个简单的 Java 代码将 2 添加到 long 的集合中,然后打印 2 是否是该集合的成员:

import java.util.*;

class A {
    public static void main(String[] args) {
        HashSet<Long> s = new HashSet<Long>();
        long x = 2;
        s.add(x);
        System.out.println(s.contains(2));
    }
}

它应该打印true,因为2 在集合中,而是打印false。为什么?

$ javac A.java && java A
false

【问题讨论】:

  • 尝试使用Long 对象而不是long 原语。
  • @LuiggiMendoza - 由于自动装箱,long 原语可以正常工作。问题是它是一个int 原语。
  • 对不起,你是对的。文字 2 被视为int,因此自动装箱为Integer

标签: java long-integer hashset


【解决方案1】:

您的集合包含 Long 的实例,并且您正在寻找 Integer(当需要 Object 时,int 被装箱的类型)。

测试

System.out.println(s.contains(Long.valueOf(2))); 

System.out.println(s.contains(2L)); 

【讨论】:

  • 我宁愿输入“2L”(“L”大写)而不是“2l”,因为 2l 可能看起来像 21。
  • @MarlonBernardes 已编辑:2l 更改为 2L
【解决方案2】:

当您说s.contains(2) 时,它会搜索2,默认情况下是int,它会被装箱到Integer。但是您存储的对象是Long。所以,它返回false

尝试改用s.contains(Long.valueOf(2))

【讨论】:

  • 其实存储的对象是Long,而不是long。但是 +1 是为了正确理解问题的本质。
  • 糟糕。只是一个错字。谢谢通知。 :)
【解决方案3】:

您的 Hashset 存储的是 Long 对象,而不是 int/Integer。您正在尝试获取一个 Integer,其中 int 被装箱,而需要 Object。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2014-08-05
    • 2014-02-03
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多