List和Set之間的轉換:達到集合元素去重複

在項目中看到一段代碼:

return new ArrayList<>(new HashSet<LabelEnum>(list));

當時我的表情是這樣的:
這裏寫圖片描述
    這把list作爲構造參數創建新的集合來返回是要做什麼,這裏的list也是ArrayList集合,這樣繞了一圈返回,恩,
想起一句話“存在即是合理”開始琢磨業務需要:list中的元素不能有重複。
    那爲什麼不直接用HashSet呢?
因爲這個list到時是要存入DTO中,所以儘量不修改原來的代碼。使用list轉換set再轉回list,達到集合元素去重複的目的。

Set與List之間轉化:

  • List list = new ArrayList(set);
  • Set set = new HashSet(list);
    但是有一點,轉換當中可能要丟失數據,尤其是從list轉換到set的時候,因爲set不能有重複數據

測試:

public static void main(String[] args) {
     List<String> list = new ArrayList<>();
     Collections.addAll(list, "haha", "xixi", "huihui", "haha", "aaa");//填充
     System.out.println("list:" + list);
     Set<String> set = new HashSet<>(list);//通過構造函數給set填充list中的數據,內部就是初始化後調用的addAll(Collection<T>)
//   set.addAll(list);//或者用addAll(Collection<T>)方法給set填充,這時重複的數據"haha"將只存儲第一個
     System.out.println("set:" + set);
     list.clear();//清空list,不然下次把set元素加入此list的時候是在原來的基礎上追加元素的
     list.addAll(set);//把set的內容填充給list
     System.out.println("list:" + list);
}

結果:

        list:[haha, xixi, huihui, haha, aaa]   //說明list是有序的,可以存重複數據
        set:[aaa, haha, xixi, huihui]          //說明set是無序的,不可以存重複數據
        list:[aaa, haha, xixi, huihui]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章