簡體   English   中英

無法比較兩個 arraylist object

[英]can not compare two arraylist object

import java.util.ArrayList;
import java.util.List;

public class arr {
    public arr () {
// creat empty list
        List<Integer> alpha = new ArrayList<>();
    }
    public static void main (String []args ) {
        arr com1 = new arr();
        arr com2= new arr();
//returning false but should be true the two are empty array
        com1.equals(com2);
    }

}

我正在嘗試創建一個 class 可以構建一個空數組但是當我嘗試比較兩個對象時它返回 false,但是兩者有一個空 arraylist 所以它應該返回 true

您正在嘗試調用一個名為isEmpty()的缺失方法。

您還需要將列表alpha作為 class 的字段移動,以便可以通過isEmpty()方法訪問它。

要檢查是否相等,只需重載equals()方法。

同樣正如@Billy 提到的,您也應該覆蓋 hashCode(這樣,如果您稍后在代碼中使用 hashSet/hashMap 來存儲 arr class ,它仍然可以工作)

import java.util.ArrayList;
import java.util.List;

public class arr {
    List<Integer> alpha = new ArrayList<>(); 

    //creates the isEmpty method 
    boolean isEmpty() {return alpha.isEmpty();}

    //check if two arr classes are the same
    @Override
    public boolean equals(Object obj) {
       if (obj == this)   return true; 
       if (obj == null || obj.getClass() != this.getClass())   
           return false; 

       arr other = (arr) obj;
       //checks if the alpha of this is the same as the alpha in obj
       return  alpha.equals(other.alpha);
    }

    //also override the hashCode method so that it'll work correctly for hash containers like hashMap and hashSet.
    @Override
    public int hashCode(){ return alpha==null?0: alpha.hashCode(); }

    public static void main (String []args ) {
        arr com1 = new arr();
        arr com2= new arr();

       //calling the isEmpty() method from the main.
       System.out.println("com1 Empty? =" +com1.isEmpty());
       //checks if com1 and com2 are equal
       System.out.println("com1 same as com2? =" +com1.equals(com2));
    }

}

您可以使用 size() 方法檢查 Arraylist 大小。 查看此內容以供進一步參考: https://www.geeksforgeeks.org/arraylist-size-method-in-java-with-examples/

您的代碼在語法上是錯誤的。

  • class arr

    • Java 約定說 class 名稱應該是名詞,大小寫混合,每個內部單詞的第一個字母大寫。 所以讓我們假設它被命名為 ArrCreator
  • arr() 是一種方法,因此:

    • 它必須有一個返回類型
    • 它不能以 static 方式訪問,應該通過 ArrCreator class 的實例
    • 因為它創建了一個空列表,而不是一個空數組,所以將其重命名為 createEmptyList()

命名仍然很亂,但現在至少你可以看到它編譯(我希望)

import java.util.ArrayList;
import java.util.List;    

public class ArrCreator
{    
    public List<Integer> createEmptyList()
    {
        // create empty list
        List<Integer> alpha = new ArrayList<>();
        return alpha;
    }

    public static void main(String[] args)
    {
        ArrCreator creator = new ArrCreator();

        List<Integer> com1 = creator.createEmptyList();
        List<Integer> com2 = creator.createEmptyList();

        System.out.println(com1.equals(com2));
    }
}

output:真

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM