有两种方法,一种是去重不带顺序的,一种是去重带顺序的。
/* * 方法1: 无顺序 * Hastset根据hashcode判断是否重复,数据不会重复 */ public static List<String> deleteDuplicate(List<String> list){ Set<String> set = new HashSet<String>(list); list.clear(); list.addAll(set); return list; } /* * 方法2:带顺序 * 通过Hashset的add方法判断是否已经添加过相同的数据,如果已存在相同的数据则不添加 */ public static List<String> deleteDuplicateWithOrder(List<String> list){ Set<String> set = new HashSet<String>(); List<String> newList = new ArrayList<String>(); Iterator<String> it = list.iterator(); while(it.hasNext()){ String str = (String)it.next(); if(set.add(str)){ newList.add(str); } } list.clear(); list.addAll(newList); return newList; }
测试:
@Test public void test1(){ List<String> list = new ArrayList<String>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); list.add("DDD"); list.add("BBB"); list.add("DDD"); list.add("FFF"); //AAA,CCC,BBB,DDD,FFF, list = deleteDuplicate(list); } @Test public void test2(){ List<String> list = new ArrayList<String>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); list.add("DDD"); list.add("BBB"); list.add("DDD"); list.add("FFF"); //AAA,BBB,CCC,DDD,FFF, list = deleteDuplicateWithOrder(list); }