在Java中删除arraylist中的连续重复项
我有一个整数数组列表,它有连续的重复行。 我想输出与之前不同的每个数字 样本:1 3 3 2 2 1 2 3 3 3 3 3 期望输出:1 3 2 1 2 3 我该怎么做 我基本上是创建一个单词的倒排索引来输入任何文本文件。在Java中删除arraylist中的连续重复项,java,list,integer,duplicates,Java,List,Integer,Duplicates,我有一个整数数组列表,它有连续的重复行。 我想输出与之前不同的每个数字 样本:1 3 3 2 2 1 2 3 3 3 3 3 期望输出:1 3 2 1 2 3 我该怎么做 我基本上是创建一个单词的倒排索引来输入任何文本文件。 我有一个文件/缓冲读取器,逐行读取多个文本文件,并将每一行放入一个2d数组,第一列为.split单词,第二列为从中获取单词的文件名。然后我有一个for循环来获取一个特定单词在所有文件中出现的频率,并将其添加到另一列。然后我将每个列复制到它们自己的arraylist中。我将单
我有一个文件/缓冲读取器,逐行读取多个文本文件,并将每一行放入一个2d数组,第一列为.split单词,第二列为从中获取单词的文件名。然后我有一个for循环来获取一个特定单词在所有文件中出现的频率,并将其添加到另一列。然后我将每个列复制到它们自己的arraylist中。我将单词arraylist添加到哈希集中以删除重复项。但我只想删除频率数组列表的连续副本。将元素相互比较的可能想法:
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;
}
publicstaticarraylistnoconsecuritivedups(arraylistinput){
ArrayList newList=新的ArrayList();
//始终添加第一个值
newList.add(input.get(0));
//迭代剩余的值
对于(int i=1;i
上面的逻辑是通过获取新列表并进行更改。但下面的代码帮助您对同一列表进行更改
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());
}
}
}
public类避免连续ups{
公共静态void main(字符串参数[]){
ArrayList=新建ArrayList();
列表。添加(“a”);
列表。添加(“b”);
列表。添加(“a”);
列表。添加(“a”);
列表。添加(“b”);
列表。添加(“a”);
列表。添加(“a”);
列表。添加(“a”);
对于(int i=1;i我在这里看到了两个答案,一个是使用额外的空间,另一个是使用额外的时间(~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);
}
}
import java.util.*;
公共类HelloWorld{
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
列表。添加(“a”);
列表。添加(“b”);
列表。添加(“a”);
列表。添加(“a”);
列表。添加(“b”);
列表。添加(“a”);
列表。添加(“a”);
列表。添加(“a”);
System.out.println(“之前:+列表”);
对于(int i=list.size()-1;i>=1;i--){
if(list.get(i).equals(list.get(i-1))){
列表。删除(i);
}
}
System.out.println(“之后:“+列表”);
}
}
你已经写了什么?问题应该包括你迄今为止为解决问题所做的工作的摘要,以及你解决问题的困难的描述。请回答你的问题并包括你解决这个问题的尝试。更多信息你是一个奇迹工作者。我一直在尝试比较输入。get(i)与input。get(i+1)而且它一直在出界。我没有想到添加一个循环,然后与前一个进行比较。哈哈!只是很有创意。:-)我不喜欢在另一个循环中有一个循环的想法,而简单的反向遍历和删除可以做到这一点。。。。