• 如何去掉list里重复的数据


    去掉list重复的数据,目前总结的以下三种方法,分别是采用set集合来做、两层循环不用任何方法来做,以及一层循环采用contains()方法来做,如下:

    1.采用set结合来做:

    package test;

    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;


    public class Test1 {

    //采用set来做,因为set是不重复的
    public static void main(String[] args) {
    List<Integer> list=new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(3);
    list.add(2);
    list.add(1);
    System.out.println(list);

    //上面的list里装的有重复的数据,我要用set来去掉重复

    Set<Integer> set=new HashSet<Integer>(list);
    System.out.println(set);//这里的set里的值已经是去掉了重复的了,如果我还想要将原有的list去重复,如下:
    System.out.println(list);
    list.clear();//将原来的list的数据全部清空
    System.out.println(list);
    list.addAll(set);//将set集合的值放入到list里,因为set里是没有重复的了,这个时候list也就没有重复的了
    System.out.println(list);
    }

    }

    2.采用双重循环来做:

    package test;

    import java.util.ArrayList;
    import java.util.List;

    public class Test2 {

    //方法二:采用循环来做
    public static void main(String[] args) {
    List<Integer> list=new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(3);
    list.add(2);
    list.add(1);
    list.add(1);
    list.add(4);
    list.add(4);
    System.out.println(list);

    for (int i = 0; i < list.size()-1; i++) {//从第一个数开始,到最后一个数-1次循环
    for (int j = list.size()-1; j >i;j--) {//从最后一个数开始到i+1
    if(list.get(i)==list.get(j)){
    list.remove(j);//这里的remove里的参数j就是角标,通过角标移除数据
    }
    }System.out.println(list);
    }
    System.out.println();
    System.out.println(list);
    }

    }

    3.采用contains()方法来做,一层循环即可解决问题:

    package test;

    import java.util.ArrayList;
    import java.util.List;


    public class Test3 {

    public static void main(String[] args) {
    //测试方法
    List<Integer> list=new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    list.add(3);
    list.add(2);
    list.add(1);
    list.add(1);
    list.add(4);
    list.add(4);
    System.out.println(list);
    List<Integer> newList = getNewList(list);
    System.out.println(newList);

    }
    /**
    *
    * 采用contains()方法
    * @param list
    * @return list
    * 说明:我需要一个不重复的list,那么我循环你给我的带重复数据的list,只有满足我新的list里不包含重复list里的值的时候,我再把获取的原list的值放的我新的list里,
    * 也就是如果我的新的list有了值,那么我就不向像新的里面添加值了。
    */
    public static List<Integer> getNewList(List<Integer> list){
    List<Integer> myList=new ArrayList<Integer>();
    for (int i = 0; i < list.size(); i++) {
    if(!myList.contains(list.get(i))){
    myList.add(list.get(i));;
    }
    }

    return myList;
    }
    }

    4.还是双重循环,也不用方法二来做

    /**
    * @author yanxu
    *用双重循环去掉重复,不用任何方法,也不用那个:外层 循环从0到长度-1,后面那个相反的那个
    */
    public static List<Integer> getDistinctList(List<Integer> list){
    List<Integer> newList = new ArrayList<Integer>();
    for (int i = 0; i < list.size(); i++) {
    //标识,方便下面使用
    boolean flag = false;
    //只要新的list里包含循环到的值,就说明重复了。
    for(int j = 0; j<newList.size(); j++){
    if(list.get(i) == newList.get(j)){
    flag = true;
    //找到一次就可以退出了 ,不需要再进行额外的次数;而且这里也不会再出现第二次 。
    break;
    }
    }
    if(!flag){
    newList.add(list.get(i));
    }
    }
    return newList;
    }

  • 相关阅读:
    深入浅出SQL教程之Group by和Having
    AFNetworking3.0 Https P12证书
    C#访问注册表
    One reason for not able to show chinese correctly in installation
    Debugging DLL loading issues with GFLAGS
    RegistryFree COM Registration
    RegistrationFree COM Interop
    net use
    MS UI Automation原来如此
    取景器的视野率和放大倍率
  • 原文地址:https://www.cnblogs.com/yver/p/5997992.html
Copyright © 2020-2023  润新知