【问题标题】:Order ArrayList serializable订购 ArrayList 可序列化
【发布时间】:2014-05-30 23:55:14
【问题描述】:

我有两个 JAVA 课程:

public class Persons implements Serializable{
    String name;
    String phone;

    ...
}

和:

public class Diary implements Comparable{
    ArrayList<Persons> persons=new ArrayList();

    ...
}

我想按名称(按字母顺序)排序我的 ArrayList,但我不能使用 Collections.sort() 因为我的 ArrayList 是 Persons 类,这给了我错误。我无法在 Persons 类中实现 Comparable,因为如果我这样做,我以后就无法读取保存在 Object .dat 中的 ArrayList

【问题讨论】:

  • 您可能无法阅读它,因为您已经对类进行了足够的更改以更改编译器生成的serialVersionUID 属性。您应该始终自己定义,而不是让编译器为您完成。
  • 但是你可以实现多个接口,这几乎是它们的重点。
  • 如果你不想碰你的 Person 类,你可以使用 sort(List list, Comparator super T> c) 做比较器来排序 Arraylist。
  • 如果你有一个Person,我会打电话给班级Person。如果你有多人,我会打电话给班级People
  • 我看不出让乳制品具有可比性。

标签: java arraylist serializable comparable


【解决方案1】:

试试这个

    Collections.sort(persons, new Comparator<Persons>() {
        @Override
        public int compare(Persons o1, Persons o2) {
            return o1.name.compareTo(o2.name);
        }});

【讨论】:

    【解决方案2】:

    如果你想要一个排序的人集合,我会这样做。

    class Dairy {
        final SortedMap<String, Person> people = new TreeMap<String, Person>();
    
    }
    

    class Dairy {
        final SortedSet<Person> people = new TreeSet<Person>(new MyNameComparator());
    
    }
    

    class Dairy {
        final List<Person> people = new ArrayList<Person>();
    
        public void sortPeople() {
            Collections.sort(people, new MyNameComparartor());
        }
    }
    

    【讨论】:

      【解决方案3】:

      这是您问题的完整示例。将下面的代码保存在 Test.java 文件中并运行它..

      import java.io.Serializable;
      import java.util.ArrayList;
      import java.util.Collections;
      import java.util.Comparator;
      
      
      class Person implements Serializable{
      
          private static final long serialVersionUID = 1L;
      
          String name  ;
          String phone ;
          public String getName() {
              return name;
          }
          public void setName(String name) {
              this.name = name;
          }
          public String getPhone() {
              return phone;
          }
          public void setPhone(String phone) {
              this.phone = phone;
          }
          public Person(String name, String phone) {
              super();
              this.name = name;
              this.phone = phone;
          }
          @Override
          public String toString() {
              return "Person [name=" + name + ", phone=" + phone + "]";
          }
      
      
      
      
      }
      
      class Diary {
      
          ArrayList<Person> list = new ArrayList<Person>();
      
          public ArrayList<Person> getList() {
              return list;
          }
      
          public void setList(ArrayList<Person> list) {
              this.list = list;
          }
      
          public Diary(ArrayList<Person> list) {
              super();
              this.list = list;
          }
      
      }
      
      public class Test
      {
          public static void main(String[] args) {
      
      
              Person p1 = new Person("John","123");
              Person p2 = new Person("Aby","456");
              Person p3 = new Person("Debra","789");
      
              ArrayList<Person> list = new ArrayList<Person>();
              list.add(p1);
              list.add(p2);
              list.add(p3);
      
              Diary d = new Diary(list);
      
              Collections.sort(d.getList(), new Comparator<Person>(){
                  public int compare(Person item1, Person item2){
                      int compare = item1.getName().compareTo(item2.getName());
                      return compare;
                  }
              });
      
              for (int i = 0; i < list.size(); i++) {
                  System.out.println(list.get(i));
              }
          }
      }
      

      它使用比较器对日记中的人员列表进行排序,而无需触及您的人员类..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-22
        • 2017-11-30
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 2020-02-04
        • 2011-09-05
        • 1970-01-01
        相关资源
        最近更新 更多