ArrayList <contact> toString()</contact>

时间:2014-03-10 21:19:11

标签: java arraylist tostring

我正在模拟我有ArrayList<Contact>的电话簿。如何覆盖toString()函数以便让这样的事情发生System.out.println(phonebook)

Name: name1; Number: number1; Name: name2; Number: number2; Name: name3; Number: number3; etc.....

这有效:

public String toString() { String phoneBookString = ""; for(Contact contact : list) { phoneBookString += contact.toString() + "\n"; } return phoneBookString; }

4 个答案:

答案 0 :(得分:3)

您可以使用anonymous class为单个对象定义自己的toString()方法,如下所示:

ArrayList<Contact> phonebook = new ArrayList<Contact>() {

    @Override
    public String toString() {
        // do stuff
    }
};

答案 1 :(得分:1)

您需要首先覆盖toString()的{​​{1}}方法:

Contact

然后在打印出这段代码时,您想@Override public String toString() { return "your string representation"; } phonebook循环:

for

for (Contact contact : phonebook) { System.out.println(contact); } 作为自己的类可能值得考虑,以便您可以实现自己的Phonebook方法。

额外的,当使用Java 8时,您可以执行以下操作,而不是编写3行代码,您可以将它写在一个更长的行中:

toString()

对于phonebook.forEach(System.out::println); 中的所有System.out.println(T)个实例,这将致System.out.println(Phonebook),已解析为Contact

答案 2 :(得分:0)

如果您真的希望toString ArrayList的行为与ArrayList的内置toString不同,您可以定义自己的子类:

class ContactList extends ArrayList<Contact> {
    // duplicate the constructors in ArrayList
    public ContactList() { super(); }
    public ContactList(Collection<? extends E> c) { super(c); }
    public ContactList(int initialCapacity) { super(initialCapacity); }

    @Override
    public String toString() {
        // your version
    }
}

现在,您可以创建ContactList类型的对象,它们的行为就像ArrayList<Contact>,但toString()的行为会有所不同。

但是,如果您的计划是在其他PhoneBook课程中仅使用 ,那么这不值得付出努力;最好在PhoneBook内写一个私有方法:

private String toString(ArrayList<Contact> a) { ... }

然后使用它。 (如果你有一个拥有私人ArrayList<Contact>成员的PhoneBook课程就是这种情况,而你唯一的用途就是写下toString()课程的PhoneBook。这是不可能的。需要为toString()成员编写覆盖ArrayList<Contact>;只需编写一个实用工具方法来创建所需的字符串。)

答案 3 :(得分:0)

首先,没有很好的方法来@Override ArrayList的toString()方法。 但还有其他不错的选择:

建议第一: 覆盖列表中对象的toString()方法。 ArrayList自动调用封闭类型的toString来打印元素的字符串表示。 然后你可以这样做:

// Converting ArrayList to String using Spring API , result is comma separated String       
String phonebookToString = StringUtils.collectionToCommaDelimitedString(phonebook);

System.out.println("String converted from ArrayList : " + phonebookToString);

或者这个:

String phonebookString = "";

for (Phone p : phonebook)
{
    phonebookString += p.toString() + "\t";
}

System.out.println(phonebookString);

建议二: 写静态方法

static void phoneBookToString(ArrayList<Phone> phonebook) { ... }

做我在第一个建议中所写的内容。