Java如何为数组中的元素赋予唯一ID

时间:2018-01-12 09:35:32

标签: java arrays

我是编程的新手,我有一个任务是制作一个摆动/ GUI crud,你可以将人/动物/电影放入阵列等(我目前在做人),它会生成邮件,用户名等。我已经完成了所有这些,但我错过了一件事。

现在 - 我想给数组中的每个元素一个唯一的ID,例如,如果1个人的ID为25,那么除非我删除了特定的ID,否则它不能是另一个具有相同ID 25的元素元件。

我使用Jframe,然后使用java公共类,我可以使用它来为我的Jframe设置。

抱歉,我是新的 - 谢谢。

1 个答案:

答案 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,并将删除冗余。

希望这会对你有所帮助。