我有两节课。
public class klass1 {
String bir;
String myID;
klass1(String bir, String myID)
{
this.bir=bir;
this.myID=myID;
}
}
import java.util.*;
public class dd {
public static void main(String[] args) {
ArrayList<Object> ar=new ArrayList();
ar.add(new klass1("wer","32"));
ar.add(new klass1("das","23"));
ar.add(new klass1("vz","45"));
ar.add(new klass1("yte","12"));
ar.add(new klass1("rwwer","43"));
ar.remove(new klass1("vz","45"));//it's not worked!!!
System.out.println(ar.size());
}
}
我想要的是从对象的第二个属性中删除或从数组列表中获取对象。我怎样才能做到这一点?它有一个简单的方法吗?
答案 0 :(得分:2)
只需在Klass1类中实现equals
方法。
public class Klass1 {
String bir;
String myID;
Klass1(String bir, String myID)
{
this.bir=bir;
this.myID=myID;
}
public boolean equals(Object o){
if(o instanceof Klass1)
return ((Klass1)o).myID.equals(myID);
else
return false;
}
}
答案 1 :(得分:0)
因为你试图删除一个不在arraylist中的新对象。当您使用new klass1("vz","45")
时,您正在创建此类的新实例,该实例不在arraylist中。
答案 2 :(得分:0)
系统内部的作用是使用equals比较这些类。为什么这不起作用在以下代码中解释:
Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1 == o2); // false, obviously
System.out.println(o1.equals(o2)); // false
System.out.println(o1); // java.lang.Object@17046822
System.out.println(o2); // java.lang.Object@22509bfc
您可以通过@后面的数字来判断这些对象具有不同的哈希值,这就是Object的equals函数检查的内容。
这与你的klass相关,因为除非你覆盖equals,否则你将使用Object的equals。如果你实现equals,你也应该总是实现hashcode。因为两者都告诉你一些关于两个对象是否是相同的&#34;,如果一个人说的不是另一个,那么代码的某些部分可能会混淆。
如何为您的班级正确实施等于:
@Override
public int hashCode() {
int hash = 7;
hash = 17 * hash + Objects.hashCode(this.bir);
hash = 17 * hash + Objects.hashCode(this.myID);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final klass1 other = (klass1) obj;
if (!Objects.equals(this.bir, other.bir)) {
return false;
}
if (!Objects.equals(this.myID, other.myID)) {
return false;
}
return true;
}
这可以在大多数IDE中使用快捷方式(在Netbeans中使用i.E. alt-insert)来完成。请注意,我在Java 7中使用Objects执行了此操作。如果您使用的是Java 6,则需要手动键入
(a == b) || (a != null && a.equals(b));
并使用适当的对象进行比较。
创建正确的哈希码并不总是微不足道的,对于更复杂的对象,您可能希望首先阅读有关哈希码的内容。对于简单对象:将素数与某些东西相乘。
equals方法通常是微不足道的,首先检查null和类相等是很重要的。这经常被程序员和NullPointerExceptions和ClassCastExceptions的常见来源所遗忘。