java判断集合里是否有某一个值,java如何判断一个集合是否含有某个值

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

一个集合中有两个元素

Set set=new HashSet();

set=[1,2]

if(set.contains(1)){system.out.println("aaaaaaaaaaaaaa")}

以上这种写法不执行

用if(set.contains('1'))这种写法也不执行

望高手指点应该怎么判断!

------解决思路----------------------

可能是类型识别出问题了,Set是泛型接口,建议定义的时候写明基类型,这样编译器能提供类型检查

------解决思路----------------------

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

}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值