java从另一个arrayList中减去一个arrayList
我有两个arrayList,我正在尝试从一个arrayList中“减去”另一个arrayList。例如,如果我有一个arrayList[1,2,3],并且我试图减去[0,2,4],那么得到的arrayList应该是[1,3]
List<Integer> a = new ArrayList<>(Arrays.asList(1, 2, 3));
List<Integer> b = Arrays.asList(0, 2, 4);
subtract(a,b) // should return [1,3]
这是我的密码
//returns a new IntSet after subtracting a from b
// .minus().toString()
ArrayList<Integer> minusArray = new ArrayList<Integer>();
minusArray.addAll(array1);
for(int i =0; i< minusArray.size(); i++){
for(int j = 0; j < array2.size(); j++){
if(minusArray.get(i).equals(array2.get(j))){
minusArray.remove(i);
if(i == 0){
;
}
else if(j == 0){
;
}
else{
i = 0;
j = 0;
}
}
else{}
}
}
return minusArray;
我的代码在某些情况下可以工作,比如如果arrayList1 = [4,6]
和arrayList2 = [6]
,它会给我一个[4]
的结果。但是如果我尝试[1,2,4]
和[0,4,8]
我有一个例外:
java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at IntSet.minus(IntSet.java:119)
at IntSetDriver.main(IntSetDriver.java:62)
这是我想出的代码。我已经做了测试,对我来说,我认为它应该有效。用户输入这些数组列表,然后对它们进行预排序,我也不知道哈希或大O
ArrayList<Integer> minusArray = new ArrayList<Integer>();
minusArray.addAll(array1);
for(int i =0; i< minusArray.size(); i++){
for(int j = 0; j < array2.size(); j++){
if(minusArray.get(i).equals(array2.get(j))){
minusArray.remove(i);
}
else{}
}
}
return minusArray;
# 1 楼答案
尝试使用组织的减法。阿帕奇。平民收藏。CollectionUtils类
返回一个包含a-b的新集合。返回集合中每个元素e的基数将是a中e的基数减去b中e的基数,或零,以较大者为准
从Apache Commons Collections
# 2 楼答案
有什么原因不能简单地使用列表吗。移除所有(列表)
# 3 楼答案
你的问题是在你的数组中。删除(…)你可以缩小数组的大小。要解决此问题,请从数组开始。size()-1,然后倒数到0
检查一下,即使这样也不能解决问题。你需要颠倒循环的顺序