Wlad Asked:2022-04-20 15:36:06 +0800 CST2022-04-20 15:36:06 +0800 CST 2022-04-20 15:36:06 +0800 CST 在 ArrayList 中重复而不迭代 772 有这样一个任务: 编写一个在 ArrayList 中查找重复对象的方法,而不使用逐个元素的枚举。 不要让我为我解决问题。我请你提出一个在哪个方向挖掘的想法。 使用逐元素枚举 - 很容易完成。但怎么没有? java 3 个回答 Voted talex 2022-04-20T15:41:53+08:002022-04-20T15:41:53+08:00 没有矫枉过正是行不通的。 您需要创建Set并遍历所有元素,检查它们是否存在Set:如果没有,则添加;如果它已经存在,则已找到重复项。 var list = Arrays.asList(1, 2, 3, 4, 2, 1); Set<Integer> set = new HashSet<>(); List<Integer> result = list.stream() .filter(e -> !set.add(e)) .collect(Collectors.toList()); System.out.println("result = " + result); Best Answer Wlad 2022-04-29T00:44:50+08:002022-04-29T00:44:50+08:00 找出老师想要的确切解决方案。 它基于比较器。 我用一个例子展示了解决方案ArrayList<Integer>,但当然这可以用于任何泛型。 ArrayList<Integer> arrayList = new ArrayList<>(); arrayList.add(5); arrayList.add(5); arrayList.add(5); arrayList.add(7); arrayList.add(9); arrayList.add(0); arrayList.add(7); Log.e("!!!!", "" + arrayList); Sorted s = new Sorted(); arrayList.sort(s); arrayList = s.fin(); Log.e("!!!!", "" + arrayList); 排序类 public class Sorted implements Comparator<Integer> { ArrayList<Integer> arr = new ArrayList<>(); @Override public int compare(Integer o1, Integer o2) { if (o1 > o2) return 1; else if (o1 < o2) return -1; else if (o1 == o2 && !arr.contains(o2)) { arr.add(o2); return 0; } else return 0; } public ArrayList<Integer> fin() { return arr; } } Wlad 2022-04-21T15:08:26+08:002022-04-21T15:08:26+08:00 为了筹集资产,我将放弃我的决定。 我不知道它有多正确,因为我将数组中的所有唯一值都迭代了1次。 更新! 把代码给老师看。他说“可以在没有循环的情况下完成。没有迭代。按照 Set 的方向思考”。 ArrayList<Integer> arrayList = new ArrayList<>(); arrayList.add(5); arrayList.add(5); arrayList.add(5); arrayList.add(7); arrayList.add(9); arrayList.add(0); arrayList.add(7); Log.e("!!!!", "" + arrayList); arrayList = sort(arrayList); Log.e("!!!", "" + arrayList); public <T> ArrayList<T> sort(ArrayList<T> arrayList) { ArrayList<T> arr_final = new ArrayList<>(); ArrayList<T> buff = new ArrayList<>(); while (arrayList.size() != 0) { T a = arrayList.get(0); arrayList.remove(0); if (arrayList.contains(a)) { arr_final.add(a); buff.add(a); arrayList.removeAll(buff); buff.clear(); } } return arr_final; }
没有矫枉过正是行不通的。
您需要创建
Set
并遍历所有元素,检查它们是否存在Set
:如果没有,则添加;如果它已经存在,则已找到重复项。找出老师想要的确切解决方案。
它基于比较器。
我用一个例子展示了解决方案
ArrayList<Integer>
,但当然这可以用于任何泛型。排序类
为了筹集资产,我将放弃我的决定。
我不知道它有多正确,因为我将数组中的所有唯一值都迭代了1次。
更新!
把代码给老师看。他说“可以在没有循环的情况下完成。没有迭代。按照 Set 的方向思考”。