java去除list中重复的数据【distinct】

最近项目中需要对list集合中的重复值进行处理,大部分是采用两种方法,一种是用遍历list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合。
但是赋给set集合后,由于set集合是无序的,原先的顺序就打乱了。所以我又想着能不能用set的特性进行去重又不打乱顺序呢?
【注意:set是无序唯一的】
试了一下,也是可以的,几种方法在不同情况下都有各自的优势。现在将代码写出来,比较一下。

1、//set集合去重,不打乱顺序
    public static void main(String[] args){
         List<String> list  =   new  ArrayList<String>(); 
         list.add("aaa");
         list.add("bbb");
         list.add("aaa");
         list.add("aba");
         list.add("aaa");

         Set set = new  HashSet(); 
         List newList = new  ArrayList(); 
         for (String cd:list) {
            if(set.add(cd)){
                newList.add(cd);
            }
        }
         System.out.println( "去重后的集合: " + newList); 
      }

2、 //遍历后判断赋给另一个list集合
     public static void main(String[] args){
         List<String> list  =   new  ArrayList<String>(); 
         list.add("aaa");
         list.add("bbb");
         list.add("aaa");
         list.add("aba");
         list.add("aaa");

         List<String> newList = new  ArrayList<String>(); 
         for (String cd:list) {
            if(!newList.contains(cd)){
                newList.add(cd);
            }
        }
         System.out.println( "去重后的集合: " + newList); 
      }

3、//set去重
    public static void main(String[] args){
         List<String> list  =   new  ArrayList<String>(); 
         list.add("aaa");
         list.add("bbb");
         list.add("aaa");
         list.add("aba");
         list.add("aaa");

        Set set = new  HashSet(); 
         List newList = new  ArrayList(); 
         set.addAll(list);
         newList.addAll(set);

         System.out.println( "去重后的集合: " + newList); 
     }

4、 //set去重(缩减为一行)
        public static void main(String[] args){
             List<String> list  =   new  ArrayList<String>(); 
             list.add("aaa");
             list.add("bbb");
             list.add("aaa");
             list.add("aba");
             list.add("aaa");

             List newList = new ArrayList(new HashSet(list)); 

             System.out.println( "去重后的集合: " + newList); 
         }

hashset不进行排序,即hashset是无序唯一的,还有一种方法是用treeset,去重并且按照自然顺序排列,将hashset改为treeset就可以了。(原本的顺序是改变的,只是按照字母表顺序排列而已)

5、//去重并且按照自然顺序排列
List newList = new ArrayList(new TreeSet(list)); 

6、参考文章
Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法


Previous
JAVA实现对包含数字、字母、中文的字符串按首字母排序 JAVA实现对包含数字、字母、中文的字符串按首字母排序
最近项目中有新的需求,需要对包含数字、字母、中文的字符串按首字母排序。看似简单,但是实现起来却很难。因为这里面包含了中文,不能单纯的取首字母的ASSIC值进行比较。考虑到最终是根据英文字母进行比较的,索性将字符串统统转化成拼音字符串进行处理
2018-12-04 Pursue
Next
java乱码解决之道 java乱码解决之道
收藏了一篇解决java乱码的文章,希望作者的博客不要挂掉了,不然查询又不方便了。网址:java乱码解决之道
2018-12-04 Pursue