简述
集合去重的方法有很多,这里总结大部分的方法,同时有些方法相对来说可能会更好。
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()
