无法比较两个arraylist对象 import java.util.ArrayList; 导入java.util.List; 公共类arr{ 公共arr(){ //创建空列表 List alpha=新的ArrayList(); } 公共静态void main(字符串[]args){ arr com1=新的arr(); arr com2=新的arr(); //返回false但应为true这两个数组都是空的 com1.等于(com2); } }
我试图创建一个可以构建空数组的类,但当我试图比较这两个对象时,它返回false,但这两个对象有一个空的arraylist,因此它应该返回true您可以使用size()方法检查arraylist的大小。签出此项以供进一步参考:您的代码语法错误无法比较两个arraylist对象 import java.util.ArrayList; 导入java.util.List; 公共类arr{ 公共arr(){ //创建空列表 List alpha=新的ArrayList(); } 公共静态void main(字符串[]args){ arr com1=新的arr(); arr com2=新的arr(); //返回false但应为true这两个数组都是空的 com1.等于(com2); } },java,arraylist,constructor,Java,Arraylist,Constructor,我试图创建一个可以构建空数组的类,但当我试图比较这两个对象时,它返回false,但这两个对象有一个空的arraylist,因此它应该返回true您可以使用size()方法检查arraylist的大小。签出此项以供进一步参考:您的代码语法错误 类arr Java约定说类名应该是名词,大小写混合,每个内部单词的第一个字母大写。所以让我们假设它被命名为ArrCreator arr()是一个方法,因此: 它必须有一个返回类型 它不能以静态方式访问,应该通过ArrCreator类的实例访问 因为它
- 类arr
- Java约定说类名应该是名词,大小写混合,每个内部单词的第一个字母大写。所以让我们假设它被命名为ArrCreator
- arr()是一个方法,因此:
- 它必须有一个返回类型
- 它不能以静态方式访问,应该通过ArrCreator类的实例访问
- 因为它创建的是一个空列表,而不是一个空数组,所以让我们将其重命名为createEmptyList()
import java.util.ArrayList;
导入java.util.List;
公共类创建者
{
公共列表createEmptyList()
{
//创建空列表
List alpha=新的ArrayList();
返回α;
}
公共静态void main(字符串[]args)
{
ArrCreator=新的ArrCreator();
List com1=creator.createEmptyList();
List com2=creator.createEmptyList();
System.out.println(com1.equals(com2));
}
}
输出:true您正在尝试调用名为
isEmpty()的缺少的方法
您还需要将列表alpha
作为类的字段移动,以便isEmpty()
方法可以访问它
要检查相等性,只需重载equals()
方法
正如@Billy提到的,您也应该重写hashCode(这样,如果您稍后在代码中使用hashSet/hashMap存储arr类,它仍然可以工作)
import java.util.ArrayList;
导入java.util.List;
公共类arr{
List alpha=新的ArrayList();
//创建isEmpty方法
布尔isEmpty(){返回alpha.isEmpty();}
//检查两个arr等级是否相同
@凌驾
公共布尔等于(对象obj){
如果(obj==this)返回true;
如果(obj==null | | obj.getClass()!=this.getClass())
返回false;
arr其他=(arr)obj;
//检查其alpha是否与obj中的alpha相同
返回alpha.equals(其他alpha);
}
//还要重写hashCode方法,以便它能正确地用于hashMap和hashSet等散列容器。
@凌驾
public int hashCode(){return alpha==null?0:alpha.hashCode();}
公共静态void main(字符串[]args){
arr com1=新的arr();
arr com2=新的arr();
//从main调用isEmpty()方法。
System.out.println(“com1 Empty?=”+com1.isEmpty());
//检查com1和com2是否相等
System.out.println(“com1与com2相同?=”+com1.equals(com2));
}
}
您可以检查alpha.size()==0;挑剔:你应该在PascalCase
中写你的类名,因为这是java的惯例,例如Arr
。或者更好的是,Array
@DebadattaMishra我的观点是我试图比较两个对象(com1和com2),而不是alpha@Bigbenz,有关如何检查相等性,请参见编辑的答案。如果你覆盖了equals
,你也应该覆盖hashCode
@Bigbenz-所以只需要将它们与equals进行比较并打印结果。我已经更新了解决方案。
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);
}
}
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));
}
}
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));
}
}