gpt4 book ai didi

Java:从 Vector 中删除自定义对象

转载 作者:行者123 更新时间:2023-12-02 00:55:50 25 4
gpt4 key购买 nike

我有MyClass ,它存储两个整数,我有一个 Vector<MyClass>myVector .

现在,我这样做:

...
myVector.add(new MyClass(1,1));
for(MyClass m : myVector)
System.out.println(m);
System.out.println(myVector.size());

myVector.remove(new MyClass(1,1));
for(MyClass m : myVector)
System.out.println(m);
System.out.println(myVector.size());
...

这里的问题是对象没有被删除,正如我在打印 vector 及其大小时看到的那样。我该如何解决这个问题?

编辑:我可以看到它没有找到该对象,并且我已经使用 contains() 进行了测试。为了确定。我需要的是按值(value)进行比较。如果我可以重载==我可以做到,但我不知道如何解决这个问题。

编辑 2:好的,equals()会做我想做的事。但我不确定要在 hashCode 方法中放入什么。

编辑3:我可以使用 contains() 找到它,但删除不会删除它。

我可以用它来删除它:

int position = myVector.indexOf(new MyClass(1,1));
myVector.remove(position);

这与remove(new MyClass(1,1))相同,除了上面的代码有效而remove()无效。有什么想法吗?

最佳答案

你有两个选择:

  • 为 MyClass 实现 equals(),或者
  • 删除您添加的同一对象实例

修改您的代码以删除您添加的同一实例:

MyClass myClass = new myClass(1,1);
myVector.add(myClass );
for(myClass m : myVector)
System.out.println(m);
System.out.println(myVector.size());

myVector.remove(myClass );
for(myClass m : myVector)
System.out.println(m);
System.out.println(myVector.size());

我看到其他人给出了 equals() 的示例实现 - 但您必须决定这就是您想要的吗?很可能是这样。您可以选择上述两个选项中的哪一个最适合该对象。

正如其他人所说,如果您实现equals(),那么您必须实现hashCode()。 Eclipse 有一个很好的右键单击选项来实现 equals()hashCode()。我见过有人只实现了 equals() 的代码问题,所以虽然这看起来像是一个理论问题,但实际上并非如此。

关于Java:从 Vector 中删除自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/588503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com