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