【问题标题】:arraylist sorting in orderarraylist 按顺序排序
【发布时间】:2015-11-18 16:55:42
【问题描述】:

尝试按字母顺序对 arraylist 进行排序,但 Collection.sort 给了我一个错误,我不知道如何处理它

import java.util.ArrayList;
import java.util.Collection;

/**
 *
 * @author user
 */
public class BookShelf {

    ArrayList<Book> listOfBooks = new ArrayList<Book>();

    public void addBook(Book book) {
        listOfBooks.add(book);
    }

    public ArrayList<Book> returnListOfBooks() {

        ArrayList<Book> myBook = new ArrayList<Book>(listOfBooks);  
        Collection.sort(myBook);
        return myBook;
    }

关于如何解决这个问题的任何帮助?非常感谢!

编辑*

只需要返回一个有序的书籍数组列表, 改成Collection后,又遇到了一个难题。

我也更改了集合导入

import java.util.ArrayList;
import java.util.Collections;

【问题讨论】:

  • Book 没有实现Comparable,这样做是不自然的。相反,您应该为可排序的书籍属性实现Comparators,例如作者、标题、发布日期等。然后使用Collections.sort(list, comparatorSpecifyingOrdering);

标签: java sorting arraylist collections


【解决方案1】:

您使用了错误的类。 包含 sort(...) 方法的类是 Collections 而不是 Collection

【讨论】:

    【解决方案2】:

    您应该使用 Collections 类而不是 Collection

    Collections.sort(myBook);
    

    如果您没有重复,我建议您使用TreeSet

    【讨论】:

      【解决方案3】:

      你使用用户定义的自定义类所以你需要实现可比较/比较器接口来支持排序

      看下面的例子:

      class Book implements Comparable<Book>
      {
          private String bookName;
      
          public Book(String bookName) {
              this.bookName = bookName;
          }
      
          public String getBookName() {
              return bookName;
          }
      
          public void setBookName(String bookName) {
              this.bookName = bookName;
          }
      
          @Override
          public int compareTo(Book o) {
              return this.bookName.compareTo(o.bookName);
          }
      
          @Override
          public int hashCode() {
              int hash = 7;
              hash = 53 * hash + Objects.hashCode(this.bookName);
              return hash;
          }
      
          @Override
          public boolean equals(Object obj) {
              if (obj == null) {
                  return false;
              }
              if (getClass() != obj.getClass()) {
                  return false;
              }
              final Book other = (Book) obj;
              if (!Objects.equals(this.bookName, other.bookName)) {
                  return false;
              }
              return true;
          }
      
      
      }
      

      现在你可以使用排序了

      //List<Book> list1  = new ArrayList<>();
      
      //Collections.sort(list1);
      

      【讨论】:

        猜你喜欢
        • 2011-01-30
        • 2017-05-22
        • 2017-09-15
        • 2019-08-02
        • 2012-05-30
        • 2019-02-03
        • 1970-01-01
        • 2012-11-03
        • 2011-03-01
        相关资源
        最近更新 更多