zoukankan      html  css  js  c++  java
  • 去除List集合中的重复值、去除数组的重复值

    一、最近项目中需要对list集合中的重复值进行处理,大部分是采用两种方法,一种是用遍历list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合。 

    但是赋给set集合后,由于set集合是无序的,原先的顺序就打乱了。所以我又想着能不能用set的特性进行去重又不打乱顺序呢? 
    试了一下,也是可以的,几种方法在不同情况下都有各自的优势。现在将代码写出来,比较一下。

     二、数组去重,和上述list去重类似

    List<string> li1 = new List<string> { "8", "8", "9", "9" ,"0","9"};
    List<string> li2 = new List<string> { "张三", "张三", "李四", "张三", "王五", "李四" };
    List<string> li3 = new List<string> { "A", "A", "C", "A", "C", "D" };
    List<string> li4 = new List<string> { "12", "18", "19", "19", "10", "19" };

    方法一、
    HashSet<string> hs = new HashSet<string>(li1); //此时已经去掉重复的数据保存在hashset中

    方法二、
    for (int i = 0; i < li2.Count; i++)  //外循环是循环的次数
                {
                    for (int j = li2.Count - 1 ; j > i; j--)  //内循环是 外循环一次比较的次数
                    {
    
                        if (li2[i] == li2[j])
                        {
                            li2.RemoveAt(j);
                        }
    
                    }
                }
    方法三、
      //把相同的用null代替。
                for (int i = 0; i < li3.Count; i++)
                {
                    for (int j = 0; j < li3.Count; j++)
                    {
                        if (i == j) continue;
    
                        if (li3[i] == li3[j])
                        {
                            li3[j] = "null";
                        }
    
                    }
                }
    方法四、
    //这方法跟上面的一样,只是变了逻辑
                for (int i = 0; i < li4.Count - 1; i++)
                {
                    for (int j = 0; j < li4.Count ; j++)
                    {
                        if (i != j)
                        {
                            if (li4[i] == li4[j])
                            {
                                li4[j] = "null";
                            }
                        }
                    }
                }
    输出结果:
      Console.WriteLine("li1去除重复后的值为");
                hs.ToList().ForEach(item => Console.WriteLine(item));
    
                Console.WriteLine("li2去除重复后的值为");
                li2.ForEach(item => Console.WriteLine(item));
    
                Console.WriteLine("li3去除重复后的值为");
                li3.ForEach(item => Console.WriteLine(item));
    
                Console.WriteLine("li4去除重复后的值为");
                li4.ForEach(item => Console.WriteLine(item));

    
    
    
  • 相关阅读:
    Java动态绑定与多态
    Java中的equals,==,compareTo和compare的比较
    Java访问控制权限
    如何用eclipse进行jar文件打包?
    堆和栈的区别
    Java命名规则
    Java面向对象的基本概念
    java中length,length(),size()区别
    《剑指offer》第二十题:表示数值的字符串
    《剑指offer》第十九题:正则表达式匹配
  • 原文地址:https://www.cnblogs.com/weiyi1314/p/11004488.html
Copyright © 2011-2022 走看看