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

时间:2019-06-09 06:53:21

标签: java arraylist equals

我有两个arraylist,每个都有3个元素。 PL1INITIAL1属于数组列表。 INITIAL1将使用值初始化,PL1将被动态编辑。如果两者相等,则将执行任何操作,否则将不执行任何操作。

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

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

我能否断定两者是等效的并执行某些操作?

4 个答案:

答案 0 :(得分:1)

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

  

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

由于它们的顺序不同,所以它们不相等。

  

我能否断定两者是等效的并执行某些操作?

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

或者只需使用Apache Commons CollectionUtils.isEqualCollection(Collection a,Collection b)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

当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");
      }
     }
}

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

,如果您希望它们的计算结果为true而不进行排序,请查看此链接

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

答案 3 :(得分:0)

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时返回false!这是 不相等,您将无法执行任何操作。

为此的最佳解决方案是您只需对PL1和INITIAL1进行排序 并返回true。