下面的代码如果通过set1 = {1、2、4、5、4、5}和set2 = {4,5,4},因为4,5,4在set1中连续发生,我希望它而不是下面的方法返回true或false,它将从set1中删除连续出现的{4,5,4},因此set1 = {1,2,5}。

public static boolean contains(ArrayList<Integer> set1, ArrayList<Integer> set2) {
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;
     return true;
 }
 return false;
}

最佳答案

首先,我将您的contains重命名为indexOf并将其修改为使用List接口并返回一个表示匹配索引的int

public static int indexOf(List<Integer> set1, List<Integer> set2) {
    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;
            return i;
        }
    }
    return -1;
}


然后是对所有匹配元素(例如,

public static void removeLinearMatch(List<Integer> al, List<Integer> bl) {
    int size = (bl != null) ? bl.size() : 0;
    int index = indexOf(al, bl);
    while (index > 0 && size > 0) {
        al.remove(index);
        size--;
    }
}


终于测试,

public static void main(String[] args) {
    List<Integer> al = new ArrayList<>(Arrays.asList(1, 2, 4, 5, 4, 5));
    List<Integer> bl = new ArrayList<>(Arrays.asList(4, 5, 4));
    removeLinearMatch(al, bl);
    System.out.println(al);
}


我得到了请求的输出

[1, 2, 5]

关于java - 我如何在我的arraylist中删除此事件,而不仅仅是检查它是否发生,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26519639/

10-10 11:19