我正在尝试创建一个搜索算法,该算法将坐标对存储在一个名为HashSquaresPec的包装器类中。为了避免重复并保持插入顺序,我将每个HashSquareSpec插入到LinkedHashSet中。即使我已经重写了equals()方法和hashCode()方法,LinkedHashSet仍然接受两个具有相同坐标对的HashSquareSpec对象。
public static void main(String [] args)
{
LinkedHashSet<HashSquareSpec> firedShots = new HashLinkedSet<HashSquareSpec>();
HashSquareSpec a = new HashSquareSpec(1,2);
HashSquareSpec b = new HashSquareSpec(2,2);
HashSquareSpec c = new HashSquareSpec(1,2);
HashSquareSpec d = new HashSquareSpec(3,2);
firedShots.add(a);
firedShots.add(b);
firedShots.add(c);
firedShots.add(d);
System.out.println(a.equals((SquareSpec)c));
Iterator l = firedShots.iterator();
while(l.hasNext())
{
System.out.println(l.next().hashCode());
}
}
Output:
true
38444474
38474265
38444474
38504056
HashSquare类
public class HashSquareSpec extends SquareSpec
{
public HashSquareSpec(int sx, int sy)
{
super(sx,sy);
}
public HashSquareSpec(String codeString)
{
super(codeString);
}
@Override
public int hashCode()
{
return this.toString().hashCode();
}
public boolean equals(HashSquareSpec other)
{
if(this.toString().equals(other.toString()))
return true;
else
return false;
}
}
和HashSquareSpec的超类
public class SquareSpec {
public int x;
public int y;
public SquareSpec(int sx, int sy) {
this.x = sx;
this.y = sy;
}
public SquareSpec(String codeString) {
this.x = Integer.parseInt(codeString.substring(1,2));
this.y = Integer.parseInt(codeString.substring(3,4));
}
public String toString() {
return("(" + x + "," + y + ")");
}
public boolean equals(SquareSpec other) {
return (other.x == this.x &&
other.y == this.y );
}
}
尽管有许多不同的hashCode变体和Eclipse equals和hashCode生成,但firedShots数据结构不断接受重复。我的代码出了什么问题?
您的方法是正确的,可以重写hashcode
和equals
,但您不正确地重写了hashsquarespec
(和squarespec
)中对象
中的equals
方法。参数必须是对象
。因为它没有被重写,所以从object
调用equals
,比较对象引用以查看它们是否是同一个对象。它们不是,所以“重复”是允许的。
尝试:
@Override
public boolean equals(Object other)
{
if(this.toString().equals(other.toString()))
return true;
else
return false;
}
您还应该测试other
是否为null
,然后确保other
是相同的类型。
包括@override
注释,这样,如果该方法实际上没有重写任何内容,编译器就会抱怨。
问题内容: 我有一个简单的问题要问,我有Product类,其中的字段如下: 我想根据ID从LinkedHasSet中删除重复项,例如,具有相同ID但数量不同的产品将被添加到集合中,我想删除(更新)具有相同ID的产品,并且它将通过我的对象的唯一ID进行操作要做到这一点? 例如,产品:id = 1,类别= CCTV,符号= TVC-DS,desc =简易摄像机,价格= 100.00, 数量= 1, 产
请注意,在转向您之前,我已经浏览了各种帖子。事实上,我尝试实现中提供的解决方案:基于“notin”条件从数据帧中删除行 我的问题如下。让我们假设我有一个巨大的数据帧,我想删除重复的数据帧。我很清楚我可以使用drop_duplicates,因为这是最快的最简单的方法。然而,我们的老师希望我们创建一个包含重复项ID的列表,然后根据这些值是否包含在上述列表中删除它们。 现在,让我们看看输出: 因此,我得
问题内容: 如何从以以下方式设置的表中删除重复项? 一个工作人员可以有多个与他们相关联的type_ID,我想删除所有重复的类型。如果有重复项,我想删除具有最新条目的类型。 问题答案: 窗口函数row_number()的教科书候选: 这也照顾了一组相同的受骗者的情况。 请参阅有关data.SE的简化演示。 更新较简单的版本 事实证明,这可以简化:在SQL Server中,您可以直接从CTE中删除:
本文向大家介绍pandas 删除重复,包括了pandas 删除重复的使用技巧和注意事项,需要的朋友参考一下 示例 用途drop_duplicates: 当您不想获取数据框的副本,而要修改现有的数据框时:
如果包含重复元素,则返回false,在本例中,我希望知道中重复元素的索引,因为我需要在其他地方使用该索引。作为一个“链接”的集合,必须有某种方法来获取索引,但我在/API中找不到任何类似的东西。
问题内容: 我在存储的过程中有一个字符串,类似于或 从上面的字符串中,我必须从中删除多个逗号,它必须看起来像 或仅在 then时 。我必须仅使用Sql Server函数。我正在使用Sql Server 2008和.Net 3.5 提前致谢。 问题答案: 该选项适用于仅使用逗号或最多398个连续逗号的字符串。 如果需要更多,在顶部添加额外的2的幂,或者如果需要较少,则从顶部删除2的幂。每个阶段的注释