1. 程式人生 > >【Java】去除List中的重複值並按照從小到大排列

【Java】去除List中的重複值並按照從小到大排列

一、前言

      前幾天,給一個同事寫介面,他的要求是,給我傳來一個List<String> ids,這個裡面可能有重複的id,需要幫她去重。我想這個用迴圈是比較麻煩的,有什麼簡單的嗎?然後就找到了下面的幾個方法,總結一下。

二、去重思路

      兩個思路:

1.遍歷List集合判斷是否在另一個集合中存在,賦值給另一個集合

2.賦值給Set結合,再返回list集合

      【知識補充】可能有一些朋友對Set不熟悉,不瞭解Set是什麼?

       Set是Collection容器的一個子介面,它不允許出現重複元素,當然也只允許有一個null物件。在這裡大家瞭解,它裡面不能放重複的資訊就行了。

三、去重方法demo

  • 方法一: 賦值給另一個list2,判斷list2是否含有要新增的值(最笨)

      這裡判斷使用的是,list2.contains(欄位)

    @Test
    public void testMap(){
            List<String> list  =   new  ArrayList<String>();
            list.add("6");
            list.add("2");
            list.add("3");
            list.add("1"
); list.add("7"); list.add("5"); list.add("2"); list.add("3"); List<String> newList = new ArrayList<String>(); for (String cd:list) { if(!newList.contains(cd)){ newList.add(cd); } } System.
out.println( "去重後的集合: " + newList); }

      結果:可以看出,使用這種方法,可以達到去重的效果,但是集合中是資料依舊是亂的,沒有排序。

去重後的集合: [6, 2, 3, 1, 7, 5]
  • 方法二、使用set.add(欄位)來判斷能否新增到set中,如果可以新增,也向新的list.add()中新增一份,不打亂順序。
   @Test
    public void testMap(){
            List<String> list  =   new  ArrayList<String>();
            list.add("6");
            list.add("2");
            list.add("3");
            list.add("1");
            list.add("7");
            list.add("5");
            list.add("2");
            list.add("3");

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

    }

      結果:同樣是達到去重,但是沒有排序。

去重後的集合: [6, 2, 3, 1, 7, 5]
  • 方法三、使用Set去重
    @Test
    public void testMap(){
            List<String> list  =   new  ArrayList<String>();
            list.add("6");
            list.add("2");
            list.add("3");
            list.add("1");
            list.add("7");
            list.add("5");
            list.add("2");
            list.add("3");
        //set 去重
        Set set = new  HashSet();
        List newList = new  ArrayList();
        set.addAll(list);
        newList.addAll(set);

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

      結果:網上有朋友說使用HashSet儲存是無順序的,但是小編親測,是有順序的。有待考證

去重後的集合: [1, 2, 3, 5, 6, 7]

      網上還有一個朋友說,使用treeSett,可以去重且按照自然順序排列

 @Test
    public void testMap(){
            List<String> list  =   new  ArrayList<String>();
            list.add("6");
            list.add("2");
            list.add("3");
            list.add("1");
            list.add("7");
            list.add("5");
            list.add("2");
            list.add("3");
            //去重並且按照自然順序排列
            List newList = new ArrayList(new TreeSet(list)); 
            System.out.println( "去重後的集合: " + newList);
}

四、小結

      沒有百不到的,沒有G不到的!
      只要自己有想法,百度和谷歌都會有相似的方案,這個就是現在網際網路的特點,小編總結的這些東西也是從網上找到的。加油!