Java中ArrayList问题:删除一个ArrayList中的重复元素,注意留意一个问题

该问题有两种方法:

  一

  利用两个数组,此法简单,不讨论

  二

  利用一个数组,从第0个开始依次取元素,并在其后元素中查找是否有该元素,有则删掉后面的重复元素,依次遍历。---但是这种情况要特别注意,当后续元素中有连续的重复元素时,如不加上y--使y(待比较的后续元素)回退一个,很可能会因为我们删掉当前重复元素y后其后的连续重复元素顶上,导致忽略掉顶上的重复元素。

代码如下:

  

 1 public static void main(String[] args) {
 2         ArrayList array=new ArrayList();
 3         array.add("hello");
 4         array.add("world");
 5         array.add("java");
 6         array.add("hello");
 7         array.add("java");
 8         array.add("world");
 9         array.add("world");
10         array.add("world");
11         array.add("java");
12         System.out.println("array:"+array);
13         for(int i=0;i<array.size();i++){
14             for(int j=i+1;j<array.size();j++){
15                 if(array.get(i)==array.get(j)){
16                     array.remove(j);
17                 }
18             }
19         }
20         System.out.println("array:"+array);
21     }

  结果为:

array:[hello, world, java, hello, java, world, world, world, java]
array:[hello, world, java, world]

漏掉了一个world,因在删除连续的几个world时,删除第一个重复的world后后一个顶上了,在删除元素后,我们没有回退一下判断刚刚顶上的元素。
改进:

public static void main(String[] args) {
        ArrayList array=new ArrayList();
        array.add("hello");
        array.add("world");
        array.add("java");
        array.add("hello");
        array.add("java");
        array.add("world");
        array.add("world");
        array.add("world");
        array.add("java");
        System.out.println("array:"+array);
        for(int i=0;i<array.size();i++){
            for(int j=i+1;j<array.size();j++){
                if(array.get(i)==array.get(j)){
                    array.remove(j);
                    j--;
                }
            }
        }
        System.out.println("array:"+array);
    }

结果为

array:[hello, world, java, hello, java, world, world, world, java]
array:[hello, world, java]

正确。

时间: 2025-01-15 04:54:30

Java中ArrayList问题:删除一个ArrayList中的重复元素,注意留意一个问题的相关文章

如何消除一个数组里面的重复元素?(面试题目)

第一眼看到这个题目的时候,思路是,找出数组中的重复元素,然后删除掉即可.下面为具体代码实现: var data = ['blue', 'red', 'green', 'blue']; function UniqueData(data) { data = data.sort(); for (var i = 0; i < data.length; i++) { if (data[i] === data[i + 1]) { data.splice(i, 1); } } return data; } U

【LeetCode-面试算法经典-Java实现】【219-Contains Duplicate II(包含重复元素II)】

[219-Contains Duplicate II(包含重复元素II)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 代码下载[https://github.com/Wang-Jun-Chao] 原题 Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = n

Python代码实现删除一个list里面的重复元素

方法一:是利用map的fromkeys来自动过滤重复值,map是基于hash的,大数组的时候应该会比排序快点吧 方法二:是用set(),set是定义集合的,无序,非重复 方法三:是排序后,倒着扫描,遇到已有的元素删之 ============================================================ #!/usr/bin/python#coding=utf-8'''Created on 2012-2-22Q: 给定一个列表,去掉其重复的元素,并输出'''de

POJ 题目1743 Musical Theme(后缀数组,求一个串中最长不重叠重复子串)

Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21826   Accepted: 7467 Description A musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the range 1..88, each representing a key on the

LeetCode Remove Duplicates from Sorted Array删除整型数组中的重复元素并返回剩下元素个数

1 class Solution { 2 public: 3 int removeDuplicates(int A[], int n) { 4 int *s=&A[0],*e=&A[0]; //s指向开头第一个,e往后遍历相同的 5 int t,i,j=n; 6 for(i=1;i<n;i++){ 7 e++; 8 if(*s==*e) 9 j--; 10 else{ 11 s++; 12 *s=*e; 13 } 14 } 15 return j; 16 } 17 }; 题意:给一个

Leetcode(83)-删除排序链表中的重复元素

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 思路:要删除一个排序链表的重复元素,重复元素都是挨着的,还是用两个指针来解决问题,一个指针用来查找重复的元素,一个指针用来重新串联起一个新的链表. ListNode* deleteDuplicates(ListNode* head) { if(head==NULL)

javase基础回顾(一)ArrayList深入解析 解读ArrayList源代码(JDK1.8.0_92)

我们在学习这一块内容时需要注意的一个问题是 集合中存放的依然是对象的引用而不是对象本身. List接口扩展了Collection并声明存储一系列元素的类集的特性.使用一个基于零的下标,元素可以通过它们在列表中的位置被插入和访问.一个列表可以包含重复元素.List在集合中是一个比较重要的知识点也是在开发中最常用的. 我们都知道ArrayList是由数组实现的,但是和数组有很大区别的是随着向ArrayList中不断添加元素,其容量也自动增长,而数组声明好之后其容量就不会改变.想要探明其中的究竟探析其

哈希(6) - 判断数组中是否存在重复元素且距离在K之内

给定一个包含多个重复元素的未排序的数组.另外给定一个数字k,且k小于数组大小.判断数组中是否包含重复元素,且它们相隔的距离处于范围k之内. 例如: Input: k = 3, arr[] = {1, 2, 3, 4, 1, 2, 3, 4} Output: false 所有重复元素的距离>k. Input: k = 3, arr[] = {1, 2, 3, 1, 4, 5} Output: true 存在重复元素1,且距离为3(==k). Input: k = 3, arr[] = {1, 2,

js判断数组中是否有重复元素

方法一:indexOf 方法 function isRepeat() { var ary = new Array("111", "22","22", "33", "111"); for (var i = 0; i < ary.length; i++) { console.log(ary.indexOf(ary[i])); if(ary.indexOf(ary[i]) != i) { alert(&qu

Perl快捷删除数组重复元素,以前写过类似的博客,今天被问起时,却支支吾吾!

以前写过类似的博客: http://blog.csdn.net/three_man/article/details/34084361 今天拿出来,再好好剖析一下: 1. 构造一个含有重复元素的数组 my @arr1 = (1 .. 10); my @arr2 = (5 .. 15); # join multi array my @arr = (@arr1, @arr2); 2. 删除数组中的重复元素 sub removeRepeat { my $arrRef = shift; my %count