java怎么判断一个集合是否含有某个值

hannahzise 2015-09-23 02:45:01
一个集合中有两个元素
Set set=new HashSet();
set=[1,2]
if(set.contains(1)){system.out.println("aaaaaaaaaaaaaa")}
以上这种写法不执行
if(set.contains('1'))这种写法也不执行

望高手指点应该怎么判断!
...全文
2963 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuangqingch 2015-09-23
  • 打赏
  • 举报
回复

Set set = new HashSet();
        set.add(1);
        set.add(2);
        if (set.contains(1)) {
            System.out.println("ok");
        }
以上这种写法是可以打印出ok的,楼主的代码在处理数值类型时应该没处理好。在Set中存储的必须是对象数据。即不能为原始类型数据。当使用set.add(1),时由于 java中的自动封装的特性以及无显示声明类型的字面量数值默认为int类型。则int类型的1会转变为Integer对象,所以set.add(1),相当于执行的是set.add(Integer.valueOf(1)),创建了一个Integer对象存入。而如果1已确定了类型,如byte a = 1;,则执行时,会自动转为Byte.valueOf(1),即创建的是一个Byte对象。 虽然Byte对象和Integer对象的值都为3,但底层他们计算hash值(该值用于标识对象,可以用于判断对象是否存在,是否重复等操作)时,是会计算出不同的值的。具体注意事项,楼主可以多做些测试,下面是一些简单的测试代码:

import java.lang.reflect.InvocationTargetException;
import java.util.HashSet;
import java.util.Set;

/**
 * @author zhuangqing
 */
public class Test {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        test1();
        System.out.println("=============");
        test2();

    }

    public static void test1() {
        Set set = new HashSet();
        set.add(1);
        byte a = 10;
        set.add(a);

        System.out.println(set.contains(1));// true
        System.out.println(set.contains(10));//false
        System.out.println(set.contains((byte) 10));//true
    }

    public static void test2() {
        Set set = new HashSet();
        set.add(1);
        set.add(10);
        set.add(10);
        set.add(10);
        set.add(10);
        set.add(10);
        set.add(10);
        set.add(10);
        set.add(10);
        set.add(10);


        System.out.println(set.size());// 2 (Set有去重的特点)

        byte a = 10;
        set.add(a);

        System.out.println(set.size()); //3
    }
}



解开者 2015-09-23
  • 打赏
  • 举报
回复
可能是类型识别出问题了,Set是泛型接口,建议定义的时候写明基类型,这样编译器能提供类型检查

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧