• 有关Set集合的一个小问题


    先看两段代码:

        Demo1:

    Set<Short>s=new HashSet<>();
    	    for(Short i=0;i<100;i++){
    	    	s.add(i);
    	    	s.remove(i-1);
    	    }
    	    System.out.println(s.size());
    

                Demo2:

      Set<Integer>s=new HashSet<>();
    	    for(int i=0;i<100;i++){
    	    	s.add(i);
    	    	s.remove(i-1);
    	    }
    	    System.out.println(s.size());
    

          可以尝试先思考这两段代码的输出结果。

      答案是:Demo1输出100,Demo2输出1.

      因为这里存在一个(i-1),自动将short类型转化为int类型,

          再看看Set集合的add()remove()方法

       

    boolean add(E e);
    
    boolean remove(Object o);
    

        也就是说Set集合的存放的是Object类型,会自动将short,int数值自动装箱为Short,Integer的对象

        Short,Integer不是同一种Object,自然Demo1里面的值remove不了,而Demo2会remove至只剩一个Object对象

       如结果所示。

       下面再以一段代码证:

      

     Set<Short>s=new HashSet<>();
    	  short i=1;
    	  s.add(i);
    	  int j=1;
    	  s.remove(j);
    	  System.out.println(i==j);
    	  System.out.println(s);
    

     输出结果:true  [1]
        也证实了这点:基本类型下虽然可以自动转换,但是对Set集合中来说,进行自动装箱后Object是完全不同的,自然remove不了

  • 相关阅读:
    slf4j的使用
    hashMap
    HBase
    HBase应用快速开发
    初学MongoDB 遇到提示由于目标计算机积极拒绝,无法连接
    Flask学习中运行“helloworld”出现UnicodeDecodeError: 'utf-8' codec can't decode问题
    doGet或doPost方法没有调用的一个原因
    markdown测试
    tomcat集成到IDEA与部署项目
    tomcat部署项目的方式
  • 原文地址:https://www.cnblogs.com/goxcheer/p/7299765.html
Copyright © 2020-2023  润新知