从Java中的arraylist中删除连续的重复项

时间:2015-02-12 01:10:05

标签: java list integer duplicates

我有一个连续重复行的整数arraylist。 我想输出与之前不同的每个数字。

样本:1 3 3 3 2 2 1 2 2 3 3 3

期望输出:1 3 2 1 2 3

我该怎么做?

我实际上是为任何文本文件输入创建一个倒置的单词索引。 我有一个文件/缓冲读取器逐行读取多个文本文件并将每一行放入一个2d数组,第一列是.split字,第二列是从中获取单词的文件名。然后我有一个for循环来获取所有文件中出现特定单词的频率并将其添加到另一列。然后我将每一列复制到他们自己的arraylist中。我将一个单词arraylist添加到一个hashset中以删除重复项。但我想只删除频率arraylist的连续重复。

3 个答案:

答案 0 :(得分:5)

将元素相互比较的可能想法:

public static ArrayList<Integer> noConsecutiveDups(ArrayList<Integer> input) {

  ArrayList<Integer> newList = new ArrayList<Integer>();

  // Always add first value
  newList.add(input.get(0));

  // Iterate the remaining values
  for(int i = 1; i < input.size(); i++) {
    // Compare current value to previous
    if(input.get(i-1) != input.get(i)) {
       newList.add(input.get(i));
    }
  }

  return newList;
}

答案 1 :(得分:0)

上面的逻辑是通过获取一个新列表并进行更改。但是下面的代码可以帮助您对同一列表进行更改。

public class AvoidConsecutiveDups {
    public static void main(String args[]) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("a");
        list.add("a");
        list.add("a");

        for (int i = 1; i <= list.size() - 1; i++) {
            if (list.get(i - 1) == list.get(i)) {
                list.remove(i - 1);
                for (int j = 1; j <= list.size() - 1; j++) {
                    if (list.get(j - 1) == list.get(j)) {
                        list.remove(j - 1);
                    }
                }
            }
        }

        Iterator itr = list.iterator();

        while (itr.hasNext()) {
            System.out.println(itr.next());
        }
    }
}

答案 2 :(得分:0)

我在这里看到了两个答案,一个是使用了额外的空间,另一个是使用了额外的时间(~n^2),所以这是一个简单的反向迭代和删除,它有助于在 o(n) 时间内删除连续的重复项,而无需使用额外的空间:

import java.util.*;
public class HelloWorld{

     public static void main(String []args){
        ArrayList<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("a");
        list.add("a");
        list.add("a");
        System.out.println("Before:"+list);
        
        for(int i =list.size()-1;i>=1;i--){
            if(list.get(i).equals(list.get(i-1))){
                list.remove(i);
            }
        }
        System.out.println("After:"+list);
     }
}