簡體   English   中英

在Java中檢查對象是否在arraylist中

[英]Checking if an object is in arraylist in Java

所以這里是分配:
學生實體除了大學 ID 外,還有姓名和地址(均由NameAddress的對象表示),以及由 ArrayList of Courses 表示的課程表

  • 您的代碼不應允許創建兩個具有相同大學 ID 的學生

所以我正在考慮使用 ArrayList 來保存學生列表並在創建新學生之前檢查學生是否存在。 抱歉,這是我的第一個問題,所以我正在盡力解釋:

這是我的地址類:

public class Address {
private int streetNumber;
private String streetName;
private String city;
private String state;
private int province;
private String country;

public Address (int streetNumber,String streetName,String city,String state,int province,String country)
{
    this.streetNumber=streetNumber;
    this.streetName=streetName;
    this.city=city;
    this.state=state;
    this.province=province;
    this.country=country;
}
public int getStreetNumber() {
    return streetNumber;
}

public void setStreetNumber(int streetNumber) {
    this.streetNumber = streetNumber;
}

public String getStreetName() {
    return streetName;
}

public void setStreetName(String streetName) {
    this.streetName = streetName;
}

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
}

public String getState() {
    return state;
}

public void setState(String state) {
    this.state = state;
}

public int getProvince() {
    return province;
}

public void setProvince(int province) {
    this.province = province;
}

public String getCountry() {
    return country;
}

public void setCountry(String country) {
    this.country = country;
}

public String toString() {
    return " [streetNumber=" + streetNumber + ", streetName=" + streetName
            + ", city=" + city + ", state=" + state + ", province="+province+", country="
            + country + "]";
}

public boolean equals(Address add)
{
    if(add==null)
    {
        return true;
    }
    if(this.getClass()!=add.getClass())
    {
        return false;
    }
    Address address=(Address) add;
    return streetNumber==address.streetNumber && 
            province==address.province && streetName.equals(address.streetName)
            && city.equals(address.city)&& state.equals(address.state)&& country.equals(address.country);
}

}

這是我的名字類

public class Name {
private String firstName;
private String lastName;
private char middle;

public Name (String fiName,String laName, char middle)
{       
    this.firstName=fiName;
    this.lastName=laName;
    this.middle=middle;

}

public String getFirst()
{
    return firstName;
}

public void setFirst(String first)
{
    firstName=first;
}
public String getLast()
{
    return lastName;
}

public void setLast(String last)
{
    lastName=last;
}
public char getMiddle()
{
    return middle;
}
public void setMiddle(char midd)
{
    middle=midd;
}
/*public String toString()
{
     return "[First Name= "+ firstName +" Last Name "+ lastName+" Middle Name "+ middle +"";
}*/

}

這是我的學生類:

public class Student {
private int studentId;
private Name name;
private Address address;
boolean a;
ArrayList<Course> courseSchedule = new ArrayList<Course>();
ArrayList<Student> student=new ArrayList<Student>();

public Student(String fiName,String laName, char middle,int stNumber,String stName,String city,String state,int province,String country,int id)
{
    if(student.contains(id))
    {
        System.out.println("Student cannot be same id");
    }
    else
    {
        address= new Address(stNumber,stName,city,state,province,country);
        name=new Name(fiName,laName,middle);    
        this.studentId=id;
        student.add();
    }

}

public int getID() 
{
    return studentId;
}
public void setId(int id) 
{
    this.studentId = id;
}
public ArrayList<Course> getCourseSchedule() 
{
    return courseSchedule;
}
public void setCourseSchedule(ArrayList<Course> courseSchedule) 
{
    this.courseSchedule = courseSchedule;
}
 public void addCourse(Course c) {
       courseSchedule.add(c);
 }
 public void dropCourse(Course course) {
       courseSchedule.remove(course);
 }

}

我的問題是如何將 Student 對象添加到 Student ArrayList 中,以及如何使用 contains() 方法檢查 ArrayList 中是否存在 Student Id

student.contains(id)這行就在這里,它似乎不對,我希望我現在解釋一下我的問題。 也對不起我的英語。

你不會保留名單Student在類內的對象Student 您的ArrayList<Student> student=new ArrayList<Student>(); 不屬於那里。

您將擁有另一個結構或集合,該結構或集合保存在其他地方,命名為StudentBody 實例化學生后,會將其添加到StudentBody集合。

List< Student > studentBody = new ArrayList< Student >() ;  // This list is stored somewhere else in your app.

您可以在StudentBody對象中循環一個Student對象List 對於每一個,您將訪問UniversityId成員字段並將其與要添加的新成員進行比較。

或者,您可以使用Map ,其中UniversityId對象,而值是Student對象。 添加前檢查現有密鑰。

這些解決方案忽略了並發這一重要問題。 但這對於編程入門課程中的家庭作業來說可能還可以。

使用HashMap()基於唯一ID收集信息。

public class Student {
private int studentId;
private Name name;
private Address address;
private static HashMap<Integer,Student> students = new ConcurrentHashMap<>(); // Make a static Map so all objectrs shared same data

public Student(String fiName,String laName, char middle,int stNumber,String stName,String city,String state,int province,String country,int id)
{
    if(students.contains(id))
    {
        System.out.println("Student can be same id");
    }
    else
    {
        address= new Address(stNumber,stName,city,state,province,country);
        name=new Name(fiName,laName,middle);    
        this.studentId=id;
        students.put(id,this);  // use this to add current object
    }

}

通過閱讀ArrayList源代碼,您應該覆蓋學生類的euqals函數。

public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }    
public int indexOf(Object o) {
        if (o == null) {
            for (int i = 0; i < size; i++)
                 if (elementData[i]==null)
                     return i;
                 } else {
                    for (int i = 0; i < size; i++)
                        if (o.equals(elementData[i]))
                            return i;
        }
     return -1;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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