List去重的N種方式

  /**
     * LinkedHashSet有個特性:不能添加重複數據並能保證添加順序
     *
     * @param list
     */
    public static void removeListDuplicate1(List<String> list) {
        LinkedHashSet<String> set = new LinkedHashSet<>(list.size());
        set.addAll(list);
        list.clear();
        list.addAll(set);
    }

    /**
     * 利用HashSet不能添加重複數據的特性
     * 由於HashSet不能保證添加順序,所以只能作爲判斷條件:
     *
     * @param list
     */
    public static void removeListDuplicate2(List<String> list) {
        HashSet<String> set = new HashSet<>(list.size());
        List<String> result = new ArrayList<>(list.size());
        for (String str : list) {
            if (set.add(str)) {
                result.add(str);
            }
        }
        list.clear();
        list.addAll(result);
    }


    /**
     * 利用List的contains方法循環遍歷,很容易想到,但是效率也很感人
     *
     * @param list
     */
    private static void removeListDuplicate3(List<String> list) {
        List<String> result = new ArrayList<>(list.size());
        for (String str : list) {
            if (!result.contains(str)) {
                result.add(str);
            }
        }
        list.clear();
        list.addAll(result);
    }

三種方法有何區別呢?測試一下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章