Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:比较两个包含内部ArrayList的ArrayList_Java_Algorithm_Collections_Arraylist_Comparison - Fatal编程技术网

Java:比较两个包含内部ArrayList的ArrayList

Java:比较两个包含内部ArrayList的ArrayList,java,algorithm,collections,arraylist,comparison,Java,Algorithm,Collections,Arraylist,Comparison,我有两个ArrayList,其中再次包含Hardware类型的ArrayList: private ArrayList<ArrayList<Hardware>> list1; private ArrayList<ArrayList<Hardware>> list2; enum ElementType{ Microcontroller; Core; Memory; Sensor; Pin; Port;

我有两个ArrayList,其中再次包含Hardware类型的ArrayList:

private ArrayList<ArrayList<Hardware>> list1;
private ArrayList<ArrayList<Hardware>> list2;
enum ElementType{
    Microcontroller;
    Core;
    Memory;
    Sensor;
    Pin;
    Port;
}
[Microcontroller, Memory]
[Port]
[Pin]
[Microcontroller, Memory]
[Microcontroller, Memory]
[Microcontroller, Port]
[Microcontroller, Core]
[Sensor]
[Pin]
list1的示例,其中包含3个Hardware类型的ArrayList:

private ArrayList<ArrayList<Hardware>> list1;
private ArrayList<ArrayList<Hardware>> list2;
enum ElementType{
    Microcontroller;
    Core;
    Memory;
    Sensor;
    Pin;
    Port;
}
[Microcontroller, Memory]
[Port]
[Pin]
[Microcontroller, Memory]
[Microcontroller, Memory]
[Microcontroller, Port]
[Microcontroller, Core]
[Sensor]
[Pin]
list2的示例,其中包含6个Hardware类型的ArrayList:

private ArrayList<ArrayList<Hardware>> list1;
private ArrayList<ArrayList<Hardware>> list2;
enum ElementType{
    Microcontroller;
    Core;
    Memory;
    Sensor;
    Pin;
    Port;
}
[Microcontroller, Memory]
[Port]
[Pin]
[Microcontroller, Memory]
[Microcontroller, Memory]
[Microcontroller, Port]
[Microcontroller, Core]
[Sensor]
[Pin]
现在我想检查列表1的所有ArrayList是否都包含在列表2中,并且顺序是否相同:

这将是有效的:

[Microcontroller, Memory, Core] == [Microcontroller, Memory, Core]
虽然这将具有不同的顺序,因此无效:

[Microcontroller, Memory, Core] == [Microcontroller, Core, Memory]
最后,我需要知道list1的所有ArrayList在list2中的顺序是否相同,以及它是list2中的哪一个

我为此绞尽脑汁了一段时间,因为我不知道如何使用收集的助手方法,而且我的第一个使用循环的想法非常糟糕,这对我没有帮助:

private void check() {
    for (ArrayList<Hardware> listOf1 : list1) {
        for (Hardware abstHw : listOf1) {
            System.out.println(abstHw);
                    ????????????
        }
    }   
}
private void check(){
for(arraylistlisto1:list1){
对于(硬件Abshw:listOf1){
系统输出打印LN(ABTHW);
????????????
}
}   
}
有人能帮我做这个或者给我一些方便的建议吗

干杯, 菲尔

------------------编辑---------------

我想澄清一下:


list1和list2的硬件实例不一样!它们只能通过ElementType进行比较。

你知道,你想要的其实很简单:

private void check() {
    return list2.containsAll(list1);
}
事实上,如果这样简单,您可能不需要单独的方法。

您可以使用
List\retainal()
来实现以下目的:

private ArrayList<ArrayList<Hardware>> list1;
private ArrayList<ArrayList<Hardware>> list2;
list2.retainAll(list1);
private ArrayList列表1;
私有数组列表2;
清单2.保留(清单1);
交叉点中的元素列表(
list2
执行
list#retainal()
)就是您要查找的。如果两个内部列表具有相同的对象,但顺序不同,则不会将其视为相同的对象,因此您不必明确担心这一点


注意:
List#retainal()
将修改实际的
list1
对象。如果需要保存,请在执行此操作之前复制一份。

这看起来很简单,但实际上并非如此。该用法的ArrayList为ArrayList,为了进行比较,您需要循环,然后调用containsAll@GV你错了。子数组列表通过
containsAll
equals
进行比较,这是所需要的。它还将比较包含的对象,这些对象是HardwareElement的实例。两个列表都包含不同的对象,只有ElementType可以是我答案上的相同注释。对象不同。它们可以通过ElementType(Enum)进行比较。@ph09是否可以在
硬件中覆盖
equals
?不幸的是,这些类是由EMF(Eclipse建模框架)生成的,我希望避免更改它们。平等的方法应该如何工作?