在将对象插入数组列表之前,如何删除java中对象的重复属性

在将对象插入数组列表之前,如何删除java中对象的重复属性,java,Java,假设我必须在java中向数组列表添加3个student对象。有一些属性。属性是姓名、id、年龄。在插入数组列表之前,我必须检查名称属性的唯一性。或者你可以说我必须删除重复的名称。有人能建议如何编写代码来删除这些重复的属性吗 List<Student> list=new Array List<Student>(); list.add(new Student(21,"x",25)); list.add(new Student(21,"y",26));

假设我必须在java中向数组列表添加3个student对象。有一些属性。属性是姓名、id、年龄。在插入数组列表之前,我必须检查名称属性的唯一性。或者你可以说我必须删除重复的名称。有人能建议如何编写代码来删除这些重复的属性吗

    List<Student> list=new Array List<Student>();
    list.add(new Student(21,"x",25));
    list.add(new Student(21,"y",26));
    list.add(new Student(22,"x",27));
List List=new Array List();
增加(新学生(21,“x”,25));
增加(新学生(21,“y”,26));
增加(新学生(22,“x”,27));

<代码> > p>确保代码>学生<代码>重写<代码>均衡器()>代码>,以测试你如何看待学生是等价的,然后:

if (!list.contains(someStudent)) {
    list.add(someStudent);
} else {
    System.out.println("Duplicate student.");
}

有几种方法可以执行此操作,其中之一是通过在Student类中重写equals方法来比较插入的对象,如下所示:

public class Student {
    String name;
    public boolean equals(Object o) {
       Student s = (Student)o;
       return s.name.equals(this.name);
    }
}

然后,您可以使用前面答案中讨论的contains方法检查要插入的对象。

您可以使用
HashMap
处理重复的
名称

HashMap studentsMap=新的HashMap(10)

如果您真的想替换副本(无论是否存在副本),则
您可以直接
放置
对象

  studentsMap.put( "22", someStudent );
如果映射以前包含键的映射,则会替换旧值。

适当重写equals()和hashCode(),然后使用my mbs建议的contains()方法。您可以使用中的EqualsBuilder和HashCodeBuilder类

代码:
import java.util.ArrayList;
导入java.util.List;
导入org.apache.commons.lang3.builder.EqualsBuilder;
导入org.apache.commons.lang3.builder.HashCodeBuilder;
班级学生{
私有int-id;
私有字符串名称;
私人互联网;
//建设者
公立学生(){
超级();
}
公立学生(整数id、字符串名称、整数年龄){
this.id=id;
this.name=名称;
这个。年龄=年龄;
}
//接球手和接球手
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共整数getAge(){
回归年龄;
}
公共无效设置(整数){
这个。年龄=年龄;
}
@凌驾
公共int hashCode(){
返回新的HashCodeBuilder(17,37).append(id).append(name).append(age)
.toHashCode();
}
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
if(obj==null)
返回false;
如果(getClass()!=obj.getClass())
返回false;
学生其他=(学生)obj;
返回新的EqualBuilder().append(id,other.id)
.append(name,other.name).append(age,other.age).isEquals();
}
}
公共班机{
公共静态void main(字符串[]args){
List students=new ArrayList();
学生1=新生(1,“学生名1”,18);
学生2=新生(2,“学生姓名2”,20);
如果(!students.contains(student1)){
学生。添加(学生1);
System.out.println(“学生添加”);
}否则{
System.out.println(“复制学生”);
}
}
}

使用
集合
。从:

不包含重复元素的集合

如果元素的顺序很重要,则使用


为了正确工作,
Student
必须执行
hashCode
equals
方法,否则可能无法识别单个元素是否相等。

回答与问题类似的问题:

public class Main {
    
        public static void main(String[] args) {
    
            List<Student> students = new ArrayList<Student>();
    
            Student student1 = new Student(1, "Vikash", 18);
            Student student2 = new Student(2, "Akash", 20);
            Student student3 = new Student(3, "Arvik", 18);
            students.add(student1);
            students.add(student2);
            students.add(student3);
            
            //new students
            Student student5 = new Student(5, "Vikash", 20);

            boolean flag = false;

            for(Student s :students) {
                if(s.getName().equals(student5.getName())) {
                    s.setId(student5.getId());
                    flag = true;
                }
            }
            if(flag==false) {
                students.add(student5);
            }
    
            students.forEach(action-> System.out.println(action));
        }
    
    }
公共类主{
公共静态void main(字符串[]args){
List students=new ArrayList();
学生1=新生(1,“Vikash”,18岁);
学生2=新生(2,“阿卡什”,20);
学生3=新生(3,“阿维克”,18岁);
学生。添加(学生1);
学生。添加(学生2);
学生。添加(学生3);
//新生
学生5=新生(5,“Vikash”,20);
布尔标志=假;
(学生:学生){
如果(s.getName().equals(student5.getName())){
s、 setId(student5.getId());
flag=true;
}
}
如果(标志==false){
学生。添加(学生5);
}
forEach(action->System.out.println(action));
}
}

如果您对独特元素的集合感兴趣,您应该查看
Set
s。如公认的答案中所述,当覆盖
equals
时,最好也覆盖
hashCode
,反之亦然。
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

class Student {

    private int id;

    private String name;

    private int age;

    // CONSTRUCTORS

    public Student() {
        super();
    }

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // GETTERS AND SETTERS

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder(17, 37).append(id).append(name).append(age)
        .toHashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;

        return new EqualsBuilder().append(id, other.id)
        .append(name, other.name).append(age, other.age).isEquals();

    }

}

public class Main {

    public static void main(String[] args) {

        List<Student> students = new ArrayList<Student>();

        Student student1 = new Student(1, "Student Name 1", 18);

        Student student2 = new Student(2, "Student Name 2", 20);

        if (!students.contains(student1)) {

            students.add(student1);

            System.out.println("Student added");

        } else {

            System.out.println("DUPLICATE STUDENT");
        }

    }

}
public class Main {
    
        public static void main(String[] args) {
    
            List<Student> students = new ArrayList<Student>();
    
            Student student1 = new Student(1, "Vikash", 18);
            Student student2 = new Student(2, "Akash", 20);
            Student student3 = new Student(3, "Arvik", 18);
            students.add(student1);
            students.add(student2);
            students.add(student3);
            
            //new students
            Student student5 = new Student(5, "Vikash", 20);

            boolean flag = false;

            for(Student s :students) {
                if(s.getName().equals(student5.getName())) {
                    s.setId(student5.getId());
                    flag = true;
                }
            }
            if(flag==false) {
                students.add(student5);
            }
    
            students.forEach(action-> System.out.println(action));
        }
    
    }