利用set針對list去重復是個好辦法,記錄下下。
只是針對list中的object進行了去重復的處理,如果是要依據object中的某個值進行去重復處理還是達不到目標。這里僅做依據set去重復的一個記錄,在實際項目中並沒有這么簡單的結構等着我們去重復。
大家有好的腦洞,一起分享下。
package ss; import java.util.*; /** * 針對list去重復處理 * * @author zhangss * @version 1.0 * */ public class ListDistinct <T>{ /** * 通過set去重, 不打亂原有list的順序 * list中相同的對象會被去重復 * * @param List<T> list * @return List<T> * */ public List<T> distinctBySetOrder(List<T> list){ Set<T> set = new HashSet<T>(); List<T> newList = new ArrayList<T>(); for (T t :list) { if(set.add(t)){ newList.add(t); } } return newList; } /** * 通過set去重, 順序可能會亂 * list中相同的對象會被去重復 * * @param List<T> list * @return List<T> * */ public List<T> distinctBySet(List<T> list){ return new ArrayList<T>(new HashSet<T>(list)); } /** * 通過遍歷判斷后將賦予新的集合 * * @param List<T> * @reutrn List<T> * */ public List<T> distinctByANewList(List<T> list){ List<T> newList = new ArrayList<T>(); for(T t : list){ if(!newList.contains(t)){ newList.add(t); } } return newList; } public static void main(String[] args){ ListDistinct<String> ld = new ListDistinct<String>(); List<String> list = new ArrayList<String>(); list.add("zhang"); list.add("zhang"); list.add("ss"); list.add("ss"); list.add("2s"); list.add("s3"); System.out.println("1:" + ld.distinctBySetOrder(list).toString()); System.out.println("2:" + ld.distinctBySet(list).toString()); System.out.println("3:" + ld.distinctByANewList(list).toString()); } }