创建一个类来建模列表

时间:2011-12-06 23:38:41

标签: java collections

我有一个名为Person的类。这个类代表(如名字所示)一个人。现在我必须创建一个类PhoneBook来表示Person的列表。我怎样才能做到这一点?我不明白“创建一个代表列表的类”的含义。

import java.util.*;

public class Person {

private String surname;
private String name;
private String title;
private String mail_addr;
private String company;
private String position;

private int homephone;       
private int officephone;      
private int cellphone;       

private Collection<OtherPhoneBook> otherphonebooklist;

public Person(String surname,String name,String title,String mail_addr,String company,String position){

    this.surname=surname;
    this.name=name;
    this.title=title;
    this.mail_addr=mail_addr;
    this.company=company;
    this.position=position;

    otherphonebooklist=new ArrayList<OtherPhoneBook>();

}

public String getSurname(){

    return surname;
}

public String getName(){

    return name;
}

public String getTitle(){

    return title;
}

public String getMailAddr(){

    return company;
}

public String getCompany(){

    return position;
}

public void setHomePhone(int hp){

    homephone=hp;
}

public void setOfficePhone(int op){

    officephone=op; 
}

public void setCellPhone(int cp){

    cellphone=cp;
}

public int getHomePhone(){

    return homephone;
}

public int getOfficePhone(){

    return officephone;
}

public int getCellPhone(){

    return cellphone;
}

public Collection<OtherPhoneBook> getOtherPhoneBook(){

    return otherphonebooklist;
}

public String toString(){

    String temp="";

    temp+="\nSurname: "+surname;
    temp+="\nName: "+name;
    temp+="\nTitle: "+title;
    temp+="\nMail Address: "+mail_addr;
    temp+="\nCompany: "+company;
    temp+="\nPosition: "+position;

    return temp;

}
}

3 个答案:

答案 0 :(得分:2)

您的PhoneBook课程可能会有这样的成员:

private List<Person> book = new ArrayList<Person>();

向此列表添加和检索Person个对象的方法:

public void add(final Person person) {
    this.book.add(person);
}

public Person get(final Person person) {
    int ind = this.book.indexOf(person);
    return (ind != -1) ? this.book.get(ind) : null;
}

请注意,List不是电话簿的最佳代表,因为(在最坏的情况下)您需要遍历整个列表以查找数字。

您可以进行许多改进/增强。这应该可以帮到你。

答案 1 :(得分:1)

基于名为PhoneBook的类,我假设您最终想要在电话号码和人之间创建映射。如果这是你需要做的,那么你的PhoneBook类应该包含一个Map而不是List(但这可能取决于项目的其他参数)。

public class PhoneBook
{
    private Map<String,Person> people = new HashMap<String,Person>();

    public void addPerson(String phoneNumber, Person person)
    {
        people.put(phoneNumber,person);
    }

    public void getPerson(String phoneNumber)
    {
        return people.get(phoneNumber);
    }
}

在上文中,电话号码表示为字符串,这可能并不理想,因为相同的电话号码可能具有不同的字符串表示(不同的间距或短划线等)。理想情况下,Map键是一个PhoneNumber类,它在hashCode和equals函数中将所有这些都考虑在内。

答案 2 :(得分:0)

你可以通过创建一个类PhoneBook

来实现
public class PhoneBook{

Private List<Person> personList = new ArrayList<Person>;

public void addPerson(Person person){
this.personList.add(person);
}

public List getPersonList(){
return this.personList;
}

public Person getPersonByIndex(int index){
return this.personList.get(index);
}
}