01、使用两个for循环实现List去重(有序)

/**使用两个for循环实现List去重(有序)
*
* @param list
* */
public static List removeDuplicationBy2For(List list){       for (int i=0;i
{           for (int j=i+1;j
{               if(list.get(i).equals(list.get(j))){
list.remove(j);
}
}
}       return list;
}

02、使用List集合contains方法循环遍历(有序)

/**使用List集合contains方法循环遍历(有序)
*
* @param list
* */
public static List removeDuplicationByContains(List list){
List newList =new ArrayList<>();     for (int i=0;i
{         boolean isContains =newList.contains(list.get(i));         if(!isContains){
newList.add(list.get(i));
}
}
list.clear();
list.addAll(newList);     return list;
}

03、使用HashSet实现List去重(无序)

/**使用HashSet实现List去重(无序)
*
* @param list
* */
public static List removeDuplicationByHashSet(List list){
HashSet set = new HashSet(list);      //把List集合所有元素清空
list.clear();      //把HashSet对象添加至List集合
list.addAll(set);      return list;
}

04、使用TreeSet实现List去重(有序)

/**使用TreeSet实现List去重(有序)
*
* @param list
* */
public static List removeDuplicationByTreeSet(List list){
TreeSet set = new TreeSet(list);      //把List集合所有元素清空
list.clear();      //把HashSet对象添加至List集合
list.addAll(set);      return list;
}

05、使用java8新特性stream实现List去重(有序)

/**使用java8新特性stream实现List去重(有序)
*
* @param list
* */
public static List removeDuplicationByStream(List list){
List newList = list.stream().distinct().collect(Collectors.toList());      return newList;
}

效率测试代码

public static void main(String args[]){
List list1 = new ArrayList<>();
List list2 = new ArrayList<>();
List list3 = new ArrayList<>();
List list4 = new ArrayList<>();
List list5 = new ArrayList<>();
Random random =new Random();       for (int i = 0; i < 100000; i++) {           int value =random.nextInt(500);
list1.add(value);
list2.add(value);
list3.add(value);
list4.add(value);
list5.add(value);
}       long startTime ;       long endTime;
startTime = System.currentTimeMillis();
removeDuplicationByHashSet(list1);
endTime = System.currentTimeMillis();
System.out.println("使用HashSet实现List去重时间:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationByTreeSet(list2);
endTime = System.currentTimeMillis();
System.out.println("使用TreeSet实现List去重时间:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationByStream(list3);
endTime = System.currentTimeMillis();
System.out.println("使用java8新特性stream实现List去重:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationBy2For(list4);
endTime = System.currentTimeMillis();
System.out.println("使用两个for循环实现List去重:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationByContains(list5);
endTime = System.currentTimeMillis();
System.out.println("使用List集合contains方法循环遍历:"+(endTime-startTime)+"毫秒");
}

结果:

使用HashSet实现List去重时间:40毫秒

使用TreeSet实现List去重时间:36毫秒

使用java8新特性stream实现List去重:78毫秒

使用两个for循环实现List去重:533毫秒

使用List集合contains方法循环遍历:40毫秒

更多测试结果

随机数在100范围内:

使用HashSet实现List去重时间:32毫秒

使用TreeSet实现List去重时间:40毫秒

使用java8新特性stream实现List去重:128毫秒

使用两个for循环实现List去重:693毫秒

使用List集合contains方法循环遍历:30毫秒

随机数在1000范围内:

使用HashSet实现List去重时间:34毫秒

使用TreeSet实现List去重时间:72毫秒

使用java8新特性stream实现List去重:125毫秒

使用两个for循环实现List去重:1063毫秒

使用List集合contains方法循环遍历:85毫秒

随机数在10000范围内:

使用HashSet实现List去重时间:51毫秒

使用TreeSet实现List去重时间:103毫秒

使用java8新特性stream实现List去重:201毫秒

使用两个for循环实现List去重:5448毫秒

使用List集合contains方法循环遍历:791毫秒

结论

无序HashSet,有序TreeSet