简述
集合去重的方法有很多,这里总结大部分的方法,同时有些方法相对来说可能会更好。
java
这几种方法都可以实现去重,数据比较少时效率差不多的,不过数据量比较大时,使用原始 api 会效率高点,为了兼容各个版本可以使用下面第一个方法。
public class CollectUtils {
/**list 去重最佳方法
* @param list
* @param <T>
* @return
*/
public static <T> List<T>removeDuplicate(List<T> list){
if (list == null || list.isEmpty()) return new ArrayList<T>();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return removeDuplicate4(list);
}else {
return removeDuplicate3(list);
}
}
/**
* 循环list中的所有元素然后删除重复
*
* @param list
* @param <T>
* @return
*/
public static <T> List<T> removeDuplicate1(List<T> list) {
for (int i = 0; i < list.size() - 1; i++) {
for (int j = list.size() - 1; j > i; j--) {
if (list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
return list;
}
/**
* 通过HashSet踢除重复元素
*
* @param list
* @param <T>
* @return
*/
public static <T> List<T> removeDuplicate2(List<T> list) {
HashSet h = new HashSet(list);
list.clear();
list.addAll(h);
return list;
}
/**
* 把list里的对象遍历一遍,用list.contains(),如果不存在就放入到另外一个list集合中
*
* @param list
* @param <T>
* @return
*/
public static <T> List<T> removeDuplicate3(List<T> list) {
List<T> listTemp = new ArrayList();
for (int i = 0; i < list.size(); i++) {
if (!listTemp.contains(list.get(i))) {
listTemp.add(list.get(i));
}
}
return listTemp;
}
/**
* 用JDK1.8 Stream中对List进行去重:list.stream().distinct();
*
* @param list
* @param <T>
* @return
*/
@RequiresApi(api = Build.VERSION_CODES.N)
public static <T> List<T> removeDuplicate4(List<T> list) {
return list.stream().distinct().collect(Collectors.toList());
}
}
kotlin
kotlin 中比较简单,直接调用 api 即可。
listOf(1,2).distinct()