Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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 如何使用equals()创建唯一元素的ArrayList_Java_List_Arraylist - Fatal编程技术网

Java 如何使用equals()创建唯一元素的ArrayList

Java 如何使用equals()创建唯一元素的ArrayList,java,list,arraylist,Java,List,Arraylist,我只需将唯一元素添加到ArrayList。为此,我如何重写equals方法?我想要像这样的东西: public boolean equals (Object in) { if(in == null) { return false; } else if(in instanceof UniqueFruits) { // ?? check whether the newly added element exists or not

我只需将唯一元素添加到
ArrayList
。为此,我如何重写
equals
方法?我想要像这样的东西:

public boolean equals (Object in) {
    if(in == null) {
        return false;
    }
    else if(in instanceof UniqueFruits) {
        // ?? check whether the newly added element exists or not           
        return true;
    }
    else {
        return false;
    }       
} 

如何检查新添加的元素是否存在?我必须检查水果名称。

我建议使用
Set
而不是
ArrayList
来存储唯一元素。它更容易、更干净

根据for
集合
,它是这样说的:

不包含重复元素的集合。更正式地说,设置 不包含一对元素e1和e2,使得e1.equals(e2)和at 大多数情况下只有一个空元素。正如其名称所暗示的那样,该接口建模 数学集合抽象


下面是一个关于如何从
ArrayList
中删除重复元素的示例。但是,您会注意到,提供的大多数解决方案都使用
Set
的实现来实现您想要做的事情。在任何情况下,你所做的凌驾于
equals()
之上都无助于实现你的目标。如果不是太麻烦的话(我不明白为什么您需要坚持使用
ArrayList
,鉴于您的实际需求,我强烈建议使用
Set
实现。

我建议使用
Set
而不是
ArrayList
来存储唯一的元素。这样更简单、更干净

根据for
集合
,它是这样说的:

不包含重复元素的集合。更正式地说,集合 不包含一对元素e1和e2,使得e1.equals(e2)和at 大多数是一个空元素。正如其名称所暗示的,这个接口建模 数学集合抽象


下面是一个关于如何从
ArrayList
中删除重复元素的示例。但是,您会注意到,提供的大多数解决方案都使用
Set
的实现来实现您想要做的事情。在任何情况下,overriding
equals()
你这样做无助于实现你的目标。如果不是太麻烦的话(我不明白为什么您需要坚持使用
数组列表
,鉴于您的实际需求,我强烈建议您移动到
集合
实现。

听起来您想使用一个实现。如果顺序不重要,就使用。如果您想保持插入顺序,就使用。或,以保持自然顺序。)订购,使用

在任何情况下,请确保覆盖元素对象的
equals
方法。这是一个良好的开端。在UniqueFruits的instanceof中选中
后,将
In
强制转换为
UniqueFruits

UniqueFruits uf = (UniqueFruits)in;
然后,您可以依次使用
equals
检查每个相关字段(如果字段可为空,请确保首先检查
null
)。任何现代IDE都将帮助您自动生成
equals
。您可以先尝试一下,然后与生成的版本进行比较

还要确保覆盖hashCode(IDE同样会帮助你,网上有很多关于这件事的阅读——只需搜索)


如果使用
TreeSet
(或其他
SortedSet
实现),您的元素对象应该实现,或者您应该为
SortedSet
提供一个。

听起来您想使用一个实现。如果顺序不重要,就使用。如果您想保持插入顺序,就使用。或者,为了保持自然顺序,就使用

在任何情况下,请确保覆盖元素对象的
equals
方法。这是一个良好的开端。在UniqueFruits的instanceof中选中
后,将
In
强制转换为
UniqueFruits

UniqueFruits uf = (UniqueFruits)in;
然后,您可以依次使用
equals
检查每个相关字段(如果字段可为空,请确保首先检查
null
)。任何现代IDE都将帮助您自动生成
equals
。您可以先尝试一下,然后与生成的版本进行比较

还要确保覆盖hashCode(IDE同样会帮助你,网上有很多关于这件事的阅读——只需搜索)


如果您使用
TreeSet
(或其他一些
SortedSet
实现),那么您的元素对象应该实现,或者您应该为
SortedSet
提供一个。

如果您的水果名类有两个属性,比如
水果名
水果类
,那么

您的支票代码应该是

UniqueFruits current = (UniqueFruits) in;
if(this.fruitname.equals(current.fruitname) && this.fruitclass.equals(current.fruitclass)) {
  return true;
}else{
   return false;
}
来到hashcode,让您的IDE为
UniqueFruits
类生成hasdcode。 并使用
Set
而不是
ArrayList


更轻松的是,您的IDE甚至可以为您生成equals()。

如果您的FrootName类有两个属性,如
FrootName
FrootClass
,那么

您的支票代码应该是

UniqueFruits current = (UniqueFruits) in;
if(this.fruitname.equals(current.fruitname) && this.fruitclass.equals(current.fruitclass)) {
  return true;
}else{
   return false;
}
来到hashcode,让您的IDE为
UniqueFruits
类生成hasdcode。 并使用
Set
而不是
ArrayList


更轻松的是,您的IDE甚至可以为您生成equals()。

您必须重写
equals
hashCode
方法才能做到这一点。但是如何操作呢?我需要检查部分的代码。您必须比较
if(在UniqueFruits的实例中){…}
code返回true或false,具体取决于您的规则,比如水果名或您想要/需要的任何东西,即使您得到equals()处理自定义对象时,仍需要额外的逻辑来决定是否将其添加到ArrayList中。如果需要唯一的集合,可以使用其中一个实现。必须重写
equals
hashCode
方法才能执行此操作。但如何操作?我需要检查部分的代码。必须比较a属性值