两个 Arraylist 有相同的元素但顺序不同,它们是否相等?

Two Arraylists have the same elements but in different order, are they equal?

我有两个数组列表,每个都有 3 个元素。 PL1INITIAL1 是数组列表的。 INITIAL1 将用值初始化,PL1 将被动态编辑。如果两者相等,则执行一个操作,否则什么都不做。

PL1 = [00, 01, 02]
INITIAL1 = [01, 02, 00]

值相同但顺序不同。 这两个相等吗?

我能得出两者等价的结论并执行一些操作吗?

if (INITIAL1.size() == PL1.size() && INITIAL1.containsAll(PL1)) {
  //do something
}

java 中的两个数组列表如果包含相同数量的元素、相同的内容和相同的顺序,则称它们相等。要检查它,您可以使用 .equals() 函数

例如:

import java.util.*;
public class HelloWorld{

     public static void main(String []args){
      ArrayList<String> list1=new ArrayList<String>();//Creating arraylist 
      list1.add("Ravi");//Adding object in arraylist    
      list1.add("Vijay");    
      list1.add("Ravi");    
      list1.add("Ajay");    
      //Invoking arraylist object   
      System.out.println(list1); 

      ArrayList<String> list2=new ArrayList<String>();//Creating arraylist 
      list2.add("Ravi");//Adding object in arraylist    
      list2.add("Vijay");    
      list2.add("Ravi");    
      list2.add("Ajay");    
      //Invoking arraylist object   
      System.out.println(list2); 

      if(list1.equals(list2)) {
          System.out.println("yes");
      }
     }
}

您的数组列表不会计算为相等,因为它们具有不同顺序的不同元素。

如果您希望它们在不排序的情况下评估为真,请查看此 link

Java ArrayList - how can I tell if two lists are equal, order not mattering?

如果每个列表中的元素通过 equals 方法完全相同,包括它们在列表中的顺序,则认为两个列表相等。 所以回答你的问题,

Values are same but in different order. are these two equal?

由于顺序不同,所以不相等

will I be able to conclude that both are equivalent and perform some operation?

我不知道你为什么需要这样做,但这是可能的。 您可以使用 HashMap 将 INITIALS 存储为键并检查 PL1 的大小是否与 Map 的大小相同并且 Map 包含 PL1 中的所有值通过等于检查。

或者简单地使用 Apache Commons CollectionUtils.isEqualCollection(集合 a,集合 b)

package com.practice;    
import java.util.ArrayList;
import java.util.List;
public class twoArray 
{
    public static void main(String[] args) 
    {
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();

        list1.add(00);
        list1.add(01);
        list1.add(02);
        System.out.println(list1 +" Array list 1");   // [00,01,02] Array list 1

        list2.add(01);
        list2.add(02);
        list2.add(00);
        System.out.println(list2 +" Array list 2");   // [01,02,00] Array list 2

        System.out.println(list1.equals(list2));       // output: **false**         
    }
}

我希望在看完这个例子后你有一个想法。 由于 ArrayList 在内部使用索引(位置)来存储值。 根据您的要求 [00,01,02] 和 [01,02,00] 值相同并且 顺序不同,因此您使用 ArrayList 它 returns 错误!它是 不等于 and 并且您将无法执行任何操作。

对此最好的解决方案是 sort PL1 和 INITIAL1 它 returns 是真的。