从arraylist中删除连续出现的元素

时间:2014-10-22 03:45:06

标签: java

例如,如果ArrayList带有set1 = {"a", "a", "b", "a", "b", "c", "d", "e"}ArrayList带有set2 = {"a", "b"}。请删除ab set1的出现次数有{"c", "d", "e"}

例如,如果ArrayList与set1 = {“a”,“a”,“b”,“a”,“b”,“c”,“d”,“e”}        ArrayList with set2 = {“a”,“b”}

   then remove occurence of a and b set1 will have {"c", "d", "e"}

我试过了:

public class test {
public static void main(String[] args){
ArrayList<String> contents = new ArrayList<String>();
contents.add("a");
contents.add("a");
contents.add("b");
contents.add("b");
contents.add("c");
contents.add("d");
contents.add("e");

ArrayList<String> delete = new ArrayList<String>();
delete.add("a");
delete.add("b");

for(String str: contents)
System.out.println(str);

System.out.println();

contains(contents, delete);

System.out.println();

for(String st: contents)
   System.out.println(st);

}

public static void contains(ArrayList<String> set1, ArrayList<String> set2 ) {

int count = 0;

OUTER:
for (int i = 0; i < set1.size() - set2.size(); i++) {
for (int j = 0; j < set2.size(); j++) {
if (!set1.get(i + j).equals(set2.get(j)))
continue OUTER;
else{
set1.remove(set1.get(i+j));                  
}

}
count++;

}        

System.out.println(count);

}

当前输出:a                 b                 C                 d                 Ë 我仍然得到一个b c d e但我应该只得到c d e因为a,b出现两次它应该删除两次出现。

1 个答案:

答案 0 :(得分:0)

这是我的建议。

  1. 您展示了两个ArrayList

  2. 看看List,有一个方便的选项List.removeAll()。尝试使用它。

  3. 来自Java doc,removeAll()

      

    从此列表中删除其中包含的所有元素   指定集合(可选操作)。

    编辑:

    由于您提供了 工作 。你可以尝试如下。

    List<String> list1 = new ArrayList<>();
    List<String> list2 = new ArrayList<>();
    list1.add("a");
    list1.add("a");
    list1.add("b");
    list1.add("a");
    list1.add("b");
    list1.add("c");
    list1.add("d");
    list1.add("e");
    
    list2.add("a");
    list2.add("b");
    
    list1.removeAll(list2);
    System.out.println(list1);
    

    Out put:

    [c, d, e]