java – 从ArrayList中删除重复值
发布时间:2020-12-15 07:35:50 所属栏目:Java 来源:网络整理
导读:我有一个字符串的Arraylist,我在其中添加了一些重复值.我只是想删除重复值,所以如何删除它. 这里的例子我有一个想法. ListString list = new ArrayListString(); list.add("Krishna"); list.add("Krishna"); list.add("Kishan"); list.add("Krishn"); list.a
我有一个字符串的Arraylist,我在其中添加了一些重复值.我只是想删除重复值,所以如何删除它.
这里的例子我有一个想法. List<String> list = new ArrayList<String>(); list.add("Krishna"); list.add("Krishna"); list.add("Kishan"); list.add("Krishn"); list.add("Aryan"); list.add("Harm"); System.out.println("List"+list); for (int i = 1; i < list.size(); i++) { String a1 = list.get(i); String a2 = list.get(i-1); if (a1.equals(a2)) { list.remove(a1); } } System.out.println("List after short"+list); 但是有没有足够的方法删除重复的表单列表.没有使用For循环? 解决方法
您可以从列表中创建LinkedHashSet. LinkedHashSet将仅包含每个元素一次,并且与List的顺序相同.然后从此LinkedHashSet创建一个新List.如此有效,它是一个单行:
list = new ArrayList<String>(new LinkedHashSet<String>(list)) 任何涉及List#contains或List#remove的方法都可能会减少从O(n)(如上例所示)到O(n ^ 2)的渐近运行时间. 编辑对于注释中提到的要求:如果要删除重复元素,但将字符串视为忽略大小写,则可以执行以下操作: Set<String> toRetain = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER); toRetain.addAll(list); Set<String> set = new LinkedHashSet<String>(list); set.retainAll(new LinkedHashSet<String>(toRetain)); list = new ArrayList<String>(set); 它将具有O(n * logn)的运行时间,这仍然比许多其他选项更好.请注意,这看起来比它可能要复杂得多:我假设列表中元素的顺序可能不会改变.如果列表中元素的顺序无关紧要,您可以这样做 Set<String> set = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER); set.addAll(list); list = new ArrayList<String>(set); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |