下面的代码如果通过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/