[英]Java how do I give elements in an array a Unique ID
我是編程新手,我有個任務要制作一個swing / GUI組件,您可以在其中將人/動物/電影放入數組等(我目前在做人),它將生成郵件,用戶名等。我已經完成了所有操作,但是我缺少一件事。
現在-我想為數組中的每個元素賦予某種唯一的ID,例如,如果一個人的ID為25,那么除非我刪除該特定元素,否則不可能有另一個具有相同ID 25的元素。
我使用一個Jframe,然后使用一個Java公共類,其中有我的Jframe的get和set的。
抱歉,我是新手-謝謝。
Java.lang.Object具有稱為hasCode()
和equals()
。 這些方法在實時應用中起着重要作用。 但是,並非所有應用程序都使用它。
hashCode()
如您所知,此方法提供了對象的has代碼。 基本上, Object
提供的hashCode()
的默認實現是通過將內存地址映射到整數值來派生的。 如果查看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]
由於覆蓋了Person
類中的hashCode()
和equals()
方法,因此可以使用HashSet
刪除重復的對象,如果從Person
類中刪除這些方法,則Set
集合將添加Person
所有Objects
並刪除冗余。
希望這對您有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.