java集合示例 小心重载的陷阱

Posted 听哥哥的话

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java集合示例 小心重载的陷阱相关的知识,希望对你有一定的参考价值。

package com.hra.riskprice;

import com.hra.riskprice.SysEnum.Factor_Type;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.*;
@SpringBootApplication
public class RiskpriceApplication {

    public static void main(String[] args) {
        Set<Integer> set=new TreeSet<>();
        List<Integer> list=new ArrayList<Integer>();
        for(int i=-3;i<3;i++){

            set.add(i);
            list.add(i);
        }
        System.out.println("remove 前:");//[-3, -2, -1, 0, 1, 2]
        System.out.println(set+" "+list);
        for(int i=0;i<3;i++){
            set.remove(i);//boolean remove(Object o);
            list.remove(i);//E remove(int index)
        }

        System.out.println("remove 后:");
        System.out.println(set+" "+list);
        //最终结果 set如预期因为调用的boolean remove(0bject 0)这个重载 移除了正数 剩下 -3,-2,-1
        //最终结果 list不如预期产生了混论 剩下 -2,0,2 原因见#list解释#

        //#list解释# list调用的是E remove(int index)这个重载 刚开始list有 :-3,-2,-1,0,1,2这些元素
        //这里我们标出了编号,每次remove后编号都会重新计算(很重要哦,这句话) -3(0),-2(1),-1(2),0(3),1(4),2(5)
        //list remove(0)  移除编号为0的元素后剩下     -2(0),-1(1),0(2),1(3),2(4)
        //list.remove(1)  移除编号为1的元素后剩下     -2(0),0(1),1(2),2(3)
        //list.remove(2)  移除编号为2的元素后剩下     -2(0),0(1),2(3)
        //#list解释#

        //如上我们分析出了list不如预期的原因,那么如何解决呢,让list.remove的时候调用boolean remove(Object o)这个重载呢,简单改为list.remove((Integer) i)就好了
    }
}

 

以上是关于java集合示例 小心重载的陷阱的主要内容,如果未能解决你的问题,请参考以下文章

Groovy集合遍历 ( 操作符重载 | 集合中的 “ + “ 操作符重载 | 集合中的 “ - “ 操作符重载 | 代码示例 )

Groovy集合遍历 ( 操作符重载 | 集合中的 “ + “ 操作符重载 | 集合中的 “ - “ 操作符重载 | 代码示例 )

Groovymap 集合 ( map 集合操作符重载 | + 操作符重载 | 代码示例 )

Groovymap 集合 ( map 集合操作符重载 | - 操作符重载 | 代码示例 )

Java 集合(ListSet)遍历判断删除元素时的小陷阱

编写高质量代码改善C#程序的157个建议——建议38:小心闭包中的陷阱