簡體   English   中英

Java我如何給數組中的元素一個唯一的ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM