简述

集合去重的方法有很多,这里总结大部分的方法,同时有些方法相对来说可能会更好。

java

这几种方法都可以实现去重,数据比较少时效率差不多的,不过数据量比较大时,使用原始 api 会效率高点,为了兼容各个版本可以使用下面第一个方法。

  1. public class CollectUtils {
  2. /**list 去重最佳方法
  3. * @param list
  4. * @param <T>
  5. * @return
  6. */
  7. public static <T> List<T>removeDuplicate(List<T> list){
  8. if (list == null || list.isEmpty()) return new ArrayList<T>();
  9. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
  10. return removeDuplicate4(list);
  11. }else {
  12. return removeDuplicate3(list);
  13. }
  14. }
  15. /**
  16. * 循环list中的所有元素然后删除重复
  17. *
  18. * @param list
  19. * @param <T>
  20. * @return
  21. */
  22. public static <T> List<T> removeDuplicate1(List<T> list) {
  23. for (int i = 0; i < list.size() - 1; i++) {
  24. for (int j = list.size() - 1; j > i; j--) {
  25. if (list.get(j).equals(list.get(i))) {
  26. list.remove(j);
  27. }
  28. }
  29. }
  30. return list;
  31. }
  32. /**
  33. * 通过HashSet踢除重复元素
  34. *
  35. * @param list
  36. * @param <T>
  37. * @return
  38. */
  39. public static <T> List<T> removeDuplicate2(List<T> list) {
  40. HashSet h = new HashSet(list);
  41. list.clear();
  42. list.addAll(h);
  43. return list;
  44. }
  45. /**
  46. * 把list里的对象遍历一遍,用list.contains(),如果不存在就放入到另外一个list集合中
  47. *
  48. * @param list
  49. * @param <T>
  50. * @return
  51. */
  52. public static <T> List<T> removeDuplicate3(List<T> list) {
  53. List<T> listTemp = new ArrayList();
  54. for (int i = 0; i < list.size(); i++) {
  55. if (!listTemp.contains(list.get(i))) {
  56. listTemp.add(list.get(i));
  57. }
  58. }
  59. return listTemp;
  60. }
  61. /**
  62. * 用JDK1.8 Stream中对List进行去重:list.stream().distinct();
  63. *
  64. * @param list
  65. * @param <T>
  66. * @return
  67. */
  68. @RequiresApi(api = Build.VERSION_CODES.N)
  69. public static <T> List<T> removeDuplicate4(List<T> list) {
  70. return list.stream().distinct().collect(Collectors.toList());
  71. }
  72. }

kotlin

kotlin 中比较简单,直接调用 api 即可。

  1. listOf(1,2).distinct()

参考

Java中List集合去除重复数据的六种方法
Java List 最常用的 4 种去重方法以及性能对比测试数据