首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免ArrayList中的重复?

如何避免ArrayList中的重复?
EN

Stack Overflow用户
提问于 2017-03-02 06:13:10
回答 3查看 357关注 0票数 0

我使用了一个for循环将学生详细信息添加到ArrayList中。当我给出第二个学生的详细信息时,它会覆盖第一个数据。螺柱类

代码语言:javascript
复制
import java.util.Scanner;
public class Stud {
    private int rollNumber, age;
    private String firstName, lastName, gender;
    public Stud(int rollNumber, String firstName, String lastName, int age, String gender) {

    }
    public void setRollnumber(int rollNumber) {
        this.rollNumber=rollNumber;
    }
    public int getRollnumber() {
        return rollNumber;
    }
    public void setFirstname(String firstName) {
        this.firstName=firstName;
    }
    public String getFirstname() {
        return firstName;
    }
    public void setLastname(String lastName) {
        this.lastName=lastName;
    }
    public String getLastname() {
        return lastName;
    }
    public void setAge(int age) {
        this.age=age;
    }
    public int getAge() {
        return age;
    }
    public void setGender(String gender) {
        this.gender=gender;
    }
    public String getGender() {
        return gender;
    }
}

类将数据添加到ArrayList中。

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.Scanner;


public class MainClass {

    public static void main(String[] args) {
        ArrayList<Stud> al=new ArrayList<Stud>();
        System.out.println("Enter the details:");
        for(int i=1;i<=10;i++) {
        int rollNumber;
        String firstName;
        String lastName;
        int age;
        String gender;
        Scanner in=new Scanner(System.in);      
        rollNumber=in.nextInt();
        firstName=in.next();
        lastName=in.next();
        age=in.nextInt();
        gender=in.next();

        Stud s=new Stud(rollNumber, firstName, lastName, age, gender);

            al.add(s);

            for (Stud stud : al) {
                stud.setRollnumber(rollNumber);
                System.out.println(stud.getRollnumber());
            }
        }           

    }

}

输出:第二次数据后第一卷的实际输出2,2.预期输出应为: A1名称: F1 L1性别:男性年龄: 11项体育赛事:标枪 资格:否(因为标枪对15岁及以上的学生开放)

号码: A2名称: F2 L2性别:女性年龄: 14项体育赛事: 100米跑

资格:是

号码: A3名称: F3 L3性别:男性年龄: 11项体育赛事: 50米跑资格:否(仅适用于10至12岁的女孩)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-02 06:23:15

这应该是可行的:

代码语言:javascript
复制
public class MainClass {

   public static void main(String[] args) {
       Set<Stud> al=new HashSet<>(); // use a set
       Scanner in=new Scanner(System.in); // init scanner here!
       System.out.println("Enter the details:");
       for(int i=1;i<=10;i++) {
           int rollNumber;
           String firstName;
           String lastName;
           int age;
           String gender;

           rollNumber=in.nextInt();
           firstName=in.next();
           lastName=in.next();
           age=in.nextInt();
           gender=in.next();

           Stud s=new Stud(rollNumber, firstName, lastName, age, gender);

           al.add(s);

           for (Stud stud : al) {
               System.out.println(stud.getRollnumber());
           }
       }
   }

private static class Stud {
    private final int rollNumber, age;
    private final String firstName, lastName;
    private final String gender;

    // assign the values you get in constructor
    public Stud(int rollNumber, String firstName, String lastName, int age, String gender) {
        this.rollNumber = rollNumber;
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
        this.gender = gender;
    }

    public int getRollnumber() {
        return this.rollNumber;
    }
    public String getFirstname() {
        return this.firstName;
    }
    public String getLastname() {
        return this.lastName;
    }
    public int getAge() {
        return this.rollNumber;
    }
    public String getGender() {
        return this.gender;
    }

    // needed for Set
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + this.age;
        result = prime * result + ((this.firstName == null) ? 0 : this.firstName.hashCode());
        result = prime * result + ((this.gender == null) ? 0 : this.gender.hashCode());
        result = prime * result + ((this.lastName == null) ? 0 : this.lastName.hashCode());
        result = prime * result + this.rollNumber;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Stud other = (Stud) obj;
        if (this.age != other.age)
            return false;
        if (this.firstName == null) {
            if (other.firstName != null)
                return false;
        } else if (!this.firstName.equals(other.firstName))
            return false;
        if (this.gender == null) {
            if (other.gender != null)
                return false;
        } else if (!this.gender.equals(other.gender))
            return false;
        if (this.lastName == null) {
            if (other.lastName != null)
                return false;
        } else if (!this.lastName.equals(other.lastName))
            return false;
        if (this.rollNumber != other.rollNumber)
            return false;
        return true;
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2017-03-02 07:06:48

如果您能够在Java 8中使用Stream类,则可以使用distinct

代码语言:javascript
复制
list.stream().distinct().collect(Collectors.toList());

“相等”--对象的方法是非常重要的。

票数 1
EN

Stack Overflow用户

发布于 2017-03-02 09:26:33

根据你的要求希望这个可行。它没有问题,覆盖以前的记录。使用Iterator类将记录添加到数组列表中。

代码语言:javascript
复制
import java.util.*;
import java.util.ArrayList;
public class ArraLis {

    private int rollNumber, age;
    private String firstName, lastName, gender,event;
    ArraLis(int rollnum, String fname, String lname, int ag, String gend,String even) {
        rollNumber=rollnum;
        age=ag;
        gender=gend;
        firstName=fname;
        lastName=lname;
        event=even;
    }
    public void setRollnumber(int rollNumber) {
        this.rollNumber=rollNumber;
    }
    public int getRollnumber() {
        return rollNumber;
    }
    public void setFirstname(String firstName) {
        this.firstName=firstName;
    }
    public String getFirstname() {
        return firstName;
    }
    public void setLastname(String lastName) {
        this.lastName=lastName;
    }
    public String getLastname() {
        return lastName;
    }
    public void setAge(int age) {
        this.age=age;
    }
    public int getAge() {
        return age;
    }
    public void setGender(String gender) {
        this.gender=gender;
    }
    public String getGender() {
        return gender;
    }
public static void main(String args[])
{
    Scanner in=new Scanner(System.in);
    ArrayList<ArraLis> al=new ArrayList<ArraLis>();
    System.out.println("enter the details");
    int rollNumber;
    String firstName;
    String lastName;
    int age;
    String gender;
    String event;
    int i;
    for(i=0;i<=2;i++)
    {
    rollNumber=in.nextInt();
    firstName=in.next();
    lastName=in.next();
    age=in.nextInt();
    gender=in.next();
    event=in.next();


    ArraLis a1=new ArraLis(rollNumber, firstName, lastName, age, gender, event);
    al.add(a1);

    }
    Iterator it=al.iterator();
    while(it.hasNext())
    {
        ArraLis ar=(ArraLis)it.next();
        System.out.println(ar.rollNumber+" "+ar.firstName+" "+ar.lastName+" "+ar.age+" "+ar.gender+" "+ar.event);
    }



}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42548067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档