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
的实现来实现您想要做的事情。在任何情况下,overridingequals()
你这样做无助于实现你的目标。如果不是太麻烦的话(我不明白为什么您需要坚持使用数组列表
,鉴于您的实际需求,我强烈建议您移动到集合
实现。听起来您想使用一个实现。如果顺序不重要,就使用。如果您想保持插入顺序,就使用。或,以保持自然顺序。)订购,使用
在任何情况下,请确保覆盖元素对象的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属性值