需要使用toString打印Arraylist并添加/删除元素

时间:2015-07-24 04:00:21

标签: java arraylist tostring

我正在修补一个库的代码并且遇到了很多麻烦所以我需要首先解决的是如何添加和删除书籍,同时还使用tostring来打印数组的当前和以前的内容。它打印出来的很好,但它并没有将它们移除。谁能告诉我为什么?当它打印出来时,我希望它只能说一次标题

标题:Gunlsinger

绘制三个

不: 标题:枪手

标题:绘制三个

class Library {

    private String books;

    Library(String b) {
        // this.owner=o;
        this.books = b;
    }

    //
    public String toString() {
        return "\nTitle:" + this.books;
        // System.out.println
    }

    public static void main(String[] args) {
        ArrayList<Library> books = new ArrayList<Library>();
        books.add(new Library("The Gunslinger"));
        books.add(new Library("The Drawing of the Three"));
        books.remove("The Gunslinger");
        for (Library a : books) {
            System.out.println(a);
        }

    }
}

5 个答案:

答案 0 :(得分:0)

首先,您必须为equals()课程实施hashCode()Library方法。然后,您可以使用books.remove(new Library("The Gunslinger"))

答案 1 :(得分:0)

首先需要学习的东西很少。

  1. 您需要覆盖equals()课程中的hashcode()Library方法,因此equals()可以轻松地将您的课程用于ArrayList操作。可以在http://tutorials.jenkov.com/java-collections/hashcode-equals.html
  2. 找到一个示例
  3. 您要从String的arraylist中删除Library。这是行不通的,因为很明显,字符串不存在于该arraylist中,而是Library类的对象。要从该arraylist中删除对象,您需要编写类似
  4. 的内容

    books.remove(new Library("The Gunslinger"));

    但要实现这一目标,您需要实施上述第1点。

    更多信息:Relationship between hashCode and equals method in Java

答案 2 :(得分:0)

从满足某些条件的集合中删除对象的简单方法是removeIf方法。

使用Java 8,这看起来像:

class Book {
    public String getTitle() {
        ...
    }
}

List<Book> library;
library.removeIf(book -> book.getTitle().equals("The Gunslinger"));

这不要求您覆盖用于集合项的类中的equalshashCode,因为谓词明确声明了您要查找的条件。

如果条件确实代表两本书是同一本书,我只会建议覆盖equals。具有相同的标题可能不是唯一的条件:对于具有相同标题的两本书,可以有多个版本甚至不同的作者。

如果您remove方法的意图确实删除了所有具有给定标题的图书,那么我建议您更改其名称(至removeAllBooksWithTitle)并使用removeIf,如上所述。< / p>

答案 3 :(得分:0)

只需覆盖equals课程中的Library方法,如下所示。

@Override
public boolean equals(Object obj) {
    if (obj == null) return false;
    if (obj == this) return true;
    if(obj instanceof Library) {
        Library lib = (Library) obj;
        return this.books.equals(lib.books);
    }
    return false;
}

ArrayList中删除元素时,请使用以下代码。

books.remove(new Library("The Gunslinger"));

这将有效。

您无法从String删除ArrayList<Library>元素。

有关详细信息,请参阅this问题。

答案 4 :(得分:0)

让我们来看看你在尝试什么。

  1. 您向ArrayList
  2. 添加了2个对象
  3. 然后,您尝试通过调用ArrayListremove(String s)中删除其中一个对象。
  4. 首先,没有remove(String s)。您的代码实际调用的是remove(Object o)。即使StringObject,此方法确实期望的Object是您的Library对象,这就是为什么您的答案表明您必须覆盖{ {1}}和equals()

    另一种方法是使用您自己的自定义类(hashCode())扩展ArrayList类,该类具有Library个对象,并实现Book

    至于“标题:”只在结果中出现一次,@ Override toString()就是为了这个。

    remove(String s)扩展Library的自定义类:

    ArrayList

    public static class Library extends ArrayList<Book> { // Adding an overload remove method that accepts a String public void remove(String book) { // Find the book to remove for (int i = 0; i < size(); i++) { if (get(i).getTitle().equals(book)) { // This remove() is one of the default remove methods // that is part of an ArrayList remove(i); break; } } } // This will display "Titles: " once along with every // book in the ArrayList @Override public String toString() { StringBuilder sb = new StringBuilder("Titles: "); // Append each book to the returning String forEach(book -> sb.append(book).append("\n")); return sb.toString(); } } 自定义类:

    Book

    用法:

    public static class Book {
        private String title;
    
        public Book(String title) {
            this.title = title;
        }
    
        public String getTitle() {
            return title;
        }
    
        @Override
        public String toString() {
            // You could append additional information like 
            // author, publisher, etc...
            return title;
        }
    }
    

    结果:

    public static void main(String[] args) throws Exception {
        Library books = new Library();
        books.add(new Book("The Gunslinger"));
        books.add(new Book("The Drawing of the Three"));
        System.out.println("After add: ");
        System.out.println(books);
    
        books.remove("The Gunslinger");
        System.out.println("After remove: ");
        System.out.println(books);      
    }