使用longs的HashSet的Java代码不起作用?

Dog*_*Dog 14 java hashset long-integer

这个简单的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));
    }
}
Run Code Online (Sandbox Code Playgroud)

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

$ javac A.java && java A
false
Run Code Online (Sandbox Code Playgroud)

Den*_*ret 21

你的集合包含Long你正在寻找的实例Integer(在需要的int时候装箱的类型Object).

测试

System.out.println(s.contains(Long.valueOf(2))); 
Run Code Online (Sandbox Code Playgroud)

要么

System.out.println(s.contains(2L)); 
Run Code Online (Sandbox Code Playgroud)

  • 我宁愿输入"2L"('L'大写)而不是"2l",因为2l可能看起来像二十一. (11认同)

Rah*_*ate 6

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

请尝试使用s.contains(Long.valueOf(2)).