zoukankan      html  css  js  c++  java
  • 有关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不了

  • 相关阅读:
    -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.chan
    failed to export application
    IOS InHouse 发布流程
    BoneCP学习笔记
    form表单, css1
    HTTP协议, HTML
    自定义ORM框架
    数据库5
    数据库4
    数据库3
  • 原文地址:https://www.cnblogs.com/goxcheer/p/7299765.html
Copyright © 2011-2022 走看看