从Java中的数组列表中删除连续的重复元素(带有panache)

时间:2014-04-28 06:18:26

标签: java arraylist compression duplicates

所以有一个数组列表:

  ArrayList<Character> charOutput = new ArrayList<Character>();

他吃个字符,所以他最终会这样:

  [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, *, *, *, *, *, *, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]

但这在我们的特定应用中非常怪诞。我们想要削减他,最后,他看起来像这样:

 [0,1,*,3,4]

那么,该怎么做?

5 个答案:

答案 0 :(得分:3)

ArrayList构建Set,然后将其转换回ArrayList

如果您不想使用集合,则可以简单地对给定的ArrayList进行迭代,对于您看到的每个数字,将其添加到另一个ArrayList只要它之前没有添加。


修改(不是代码的完整解决方案)

如果您只想删除连续的元素,请迭代ArrayList,添加当前元素。现在只要下一个元素等于当前元素,继续..当你看到另一个元素与当前元素不同时,添加它...

答案 1 :(得分:2)

线性扫描数组,跟踪current item。如果next itemcurrent item匹配,请忽略它并继续前进。如果不匹配,请将new item设为current item并输出current item

这是代码

 public static void main(String []args)
 {
    ArrayList<Character> charOutput = new ArrayList<Character>();
    ArrayList<Character> charOutputTrimmed = new ArrayList<Character>();
    charOutput.add('0');charOutput.add('0');charOutput.add('0');
    charOutput.add('1');charOutput.add('1');charOutput.add('1');
    charOutput.add('*');charOutput.add('*');charOutput.add('2');
    charOutput.add('2');charOutput.add('0');

    Character currentChar = charOutput.get(0);
    charOutputTrimmed.add(currentChar);
    for(int i=1;i<charOutput.size();i++)
    {
        if(currentChar != charOutput.get(i))
        {
            currentChar = charOutput.get(i);
            charOutputTrimmed.add(currentChar);
        }
    }

    for(int i=0;i<charOutputTrimmed.size();i++)
    {
        System.out.print(charOutputTrimmed.get(i) + "\t");
    }
 }

答案 2 :(得分:1)

使用Set获取唯一列表。这样做的好处是,它适用于任何用户定义的对象..

//Converting ArrayList to HashSet to remove duplicates
LinkedHashSet<Character> listToSet = new LinkedHashSet<Character>(duplicateList);

//Creating Arraylist without duplicate values
List<Character> listWithoutDuplicates = new ArrayList<Character>(listToSet);

答案 3 :(得分:0)

循环并保持不重复的字符

ArrayList<Character> charInput = new ArrayList<Character>();
ArrayList<Character> charOutput = new ArrayList<Character>();

char lastch = 255;
for (char ch : charInput) {
    if (ch != lastch) {
        charOutput.add(ch);
    }
    lastch = ch;
}

答案 4 :(得分:0)

将arraylist对象传递给LinkedHashSet,您将获得所需的输出。

Set<Character> s = new LinkedHashSet<Character>(charOutput);

谢谢和问候。