我是编程的新手,我有一个任务是制作一个摆动/ GUI crud,你可以将人/动物/电影放入阵列等(我目前在做人),它会生成邮件,用户名等。我已经完成了所有这些,但我错过了一件事。
现在 - 我想给数组中的每个元素一个唯一的ID,例如,如果1个人的ID为25,那么除非我删除了特定的ID,否则它不能是另一个具有相同ID 25的元素元件。
我使用Jframe,然后使用java公共类,我可以使用它来为我的Jframe设置。
抱歉,我是新的 - 谢谢。
答案 0 :(得分:0)
Java.lang.Object 包含名为hasCode()
和equals()
的方法。这些方法在实时应用中起着重要作用。但是,它的使用并不总是适用于所有应用程序。
<强> hashCode()方法 强>
如您所知,此方法提供了对象的has代码。基本上,hashCode()
提供的Object
的默认实现是通过将内存地址映射到整数值得出的。如果查看Object
类的来源,您将找到hashCode
的以下代码。 public native int hashCode()
;它表示hashCode
是本机实现,它在一定程度上提供了内存地址。但是,可以覆盖实现类中的hashCode
方法。
<强> 等于() 强>
这种特殊方法用于在两个对象之间进行相等的比较。 Java
中有两种类型的比较。一个是“= =”
运算符,另一个是“equals()”
。我希望你知道这两者之间的区别。更具体地说,“.equals()”
指的是等价关系。所以从广义上讲,你说两个对象是等价的,它们满足“equals()”
条件。如果查看Object类的源代码,您将找到equals()
方法的以下代码。
因此,让我们创建一个覆盖这些方法的类Person
:
public class Person {
private Integer personId;
private String fullName;
public Integer getPersonId() {
return personId;
}
public void setPersonId(Integer personId) {
this.personId = personId;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
@Override
public String toString() {
return "Person [personId=" + personId + ", fullName="
+ fullName + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((fullName == null) ? 0 : fullName.hashCode());
result = prime * result + ((personId == null) ? 0 : personId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (fullName == null) {
if (other.fullName != null)
return false;
} else if (!fullName.equals(other.fullName))
return false;
if (personId == null) {
if (other.personId != null)
return false;
} else if (!personId.equals(other.personId))
return false;
return true;
}
}
现在是我们用于创建和管理类Person的重复对象的主类:
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class UniqueArrayExample {
//To remove duplicates objects we use here HashSet util collection
private static Set<Person> personSet = new HashSet<Person>();
public static void main(String[] args) {
//creating four objects of Person Class
Person person1 = new Person();
Person person2 = new Person();
Person person3Dupl = new Person();
Person person4 = new Person();
//third object person3Dup1 is duplicate of Object person1
person1.setPersonId(12341);
person2.setPersonId(12342);
person3Dupl.setPersonId(12341);
person4.setPersonId(12344);
person1.setFullName("Suresh Kumar");
person2.setFullName("Mahesh Singh");
person3Dupl.setFullName("Suresh Kumar");
person4.setFullName("Rajkumar Singh");
//Add those Person class Object to Set<Person> collection
personSet.add(person1);
personSet.add(person2);
personSet.add(person3Dupl);
personSet.add(person4);
//So here after getting all Objects to Iterator and by
//printing those will not give you the person1 Object duplicate.
Iterator<Person> iterator = personSet.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next().toString());
}
}
}
此处输出如上所述生成:
Person [personId=12342, fullName=Mahesh Singh]
Person [personId=12341, fullName=Suresh Kumar]
Person [personId=12344, fullName=Rajkumar Singh]
如果从类HashSet
中移除hashCode()
和equals()
方法,则可以使用Person
删除重复对象,如果从类中删除这些方法{ {1}},Person
集合将添加Set
的所有Objects
,并将删除冗余。
希望这会对你有所帮助。