当前位置: 首页 > 面试题库 >

从另一个arrayList中减去一个arrayList

漆雕硕
2023-03-14
问题内容

我有两个arrayLists,我试图从另一个中“减去”一个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;

我的代码在某些情况下可以正常工作,例如if 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)

这是我想出的代码。我已经通过它进行了测试,对我来说我认为它应该起作用。用户输入这些arrayLists并且它们是预先排序的,我也不知道Hash或big-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;

问题答案:

您的问题是在minusArray.remove(…)调用中,您可能会缩小minusArray的大小。要解决此问题,请从array.size()-1开始,然后倒计数为0

检查-即使这样也无法解决。您需要颠倒循环的顺序



 类似资料:
  • 我已经阅读了很多stackoverflow的页面,但是我无法将我的ArrayList复制到另一个类中。下面是一个场景,我正在构建一个快速的图书储蓄应用程序,类似于图书馆中的应用程序,但更简单(用于学校)。 我有我的主库类(带有main),它为主菜单/选项设置了swing。 我有一个带有新书构造函数的book类,如下所示: 在这个类中,我在确认按钮上添加了一个,以确认上要作为对象添加的输入,如下所示

  • 问题内容: 我要执行的操作类似于合并。例如,通过合并,我们得到一个数据帧,其中包含第一个AND第二个数据帧中存在的行。通过合并,我们得到一个数据帧,该数据帧在第一个或第二个数据帧中都存在。 我需要的是一个数据帧,其中包含第一个数据帧中存在的行而第二个数据帧中不存在的行?有快速而优雅的方法吗? 问题答案: 如下所示呢? 只要有一个非关键的通用命名列,就可以让在sufffexes上执行的工作(如果没有

  • 问题内容: 我已经迷上了一些SQL,其中有几行数据,我想从上一行中减去一行,并使其一直向下重复。 所以这是表格: 我希望结果显示第三列,称为差异,即从下面的一列减去第一行,最后一行从零减去。 我已经尝试过自我连接,但是我不确定如何限制结果,而不是让结果不断循环。我不能确定id值对于给定的结果集是连续的,所以我不使用该值。我可以扩展架构以包括某种顺序值。 这是我尝试过的: 谢谢您的协助。 问题答案:

  • 问题内容: 我们没有只介绍ArrayLists数组和2D数组。我需要做的是能够从另一个类的ArrayList中读取。主要目的是在for循环中读取它们,并使用存储在其中的值显示项目。但是,我已经制作了这个快速程序来对其进行测试并不断得到此错误 这是我的代码 然后是ArrayList所在的类 如果有人可以指出正确的方向,那将非常有价值。我尝试调试,但是我可以获得任何帮助。 提前致谢。 问题答案: 严格

  • 我有1D临时arraylist和2D原始arraylist,我在循环期间更新了临时arraylist,在循环结束时,我需要使原始arraylist与临时arraylist的内容相等,如下所示: 我知道有些方法

  • 我是java新手,我正试图编写我的第一个“更大”的程序,包含几个类。我在类“CompetitionProgram”中创建了一个ArrayList并将其声明为private。 我的程序中需要这两个类(Event&ListOfEvents),这是需求之一。事件--它只是表示事件本身,比如事件名称和尝试次数(它是一个体育事件)。和ListOfEvents--它表示列表本身,并包含用于添加事件、删除事件和