java如何对ArrayList中对象按照该对象某属性排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何对ArrayList中对象按照该对象某属性排序相关的知识,希望对你有一定的参考价值。

参考技术A if(!s1.name.equals(s2.name))return s2.name.compareTo(s1.name);else//姓名也相同则按学号排序return s2.id-s1.id;;Student stu1 = new Student (1,"zhangsan","male",28,"cs");Student stu2 = new Student (2,"lisi","female",19,"cs");Student stu3 = new Student (3,"wangwu","male",22,"cs");Student stu4 = new Student (4,"zhaoliu","female",17,"cs");Student stu5 = new Student (5,"jiaoming","male",22,"cs"); ArrayList List = new ArrayList();List.add(stu1);List.add(stu2);List.add(stu3);List.add(stu4);List.add(stu5);//这里就会自动根据规则进行排序Collections.sort(List,comparator);display(List);static void display(ArrayList lst)for(Student s:lst)System.out.println(s); class Studentint age;int id;String gender;String name;String cs;Student(int id,String name,String gender,int age,String cs)this.age=age;this.name=name;this.gender=gender;this.id=id;return id+" "+name+" "+gender+" "+age+" "+cs; 2.添加 Comparable 接口,重写 compareTo 方法。然后你可以用 TreeSet 结构进行排序。它会自动排序。本回答被提问者采纳

java - 如何对对象的arraylist进行排序?

【中文标题】java - 如何对对象的arraylist进行排序?【英文标题】:How to sort an arraylist of objects java? 【发布时间】:2012-04-26 02:16:15 【问题描述】:

所以我想要一个 java 中的对象数组列表。

我有object1.numberobject2.numberobject3.number等...但是这些对象除了number之外还有其他属性,例如namedistance等...

因此,如果它正在对array 中的字符串进行排序,那么将一个字符串放入temporal 并让另一个字符串代替它的位置......但是在araryList 的对象中,怎么能我做吗?

我可以将对象移动到数组的那个位置吗?

谢谢。

【问题讨论】:

你的教授想让你自己实现排序算法吗? @joncarl 说的是一个好点,如果是这样,您需要查看气泡排序(它相当容易实现但不是那么快) 是的,我将实现插入排序算法。 @user1253201:弄清楚您需要对对象做什么,并查看ListArrayList 中的方法,看看提供了哪些工具来执行此操作。大多数排序依赖于swap 方法,通常是getremoveadd 方法的组合。 【参考方案1】:

实现你自己的比较器:

Arrays.sort(yourArray, new Comparator<YourClass>() 
        @Override
        public int compare(YourClass o1, YourClass o2) 
            //compare object properties
        
);

【讨论】:

你的意思是Collections不是数组,他在这里处理的是ArrayList ArrayList 是一个集合。 Arrays.sort 用于数组,例如Object[]。如问题中所述,要对 ArrayList 进行排序,您将使用 @Papa_Jay 指出的 Collections.sort 但是,这似乎是题外话,因为 OP 显然应该实现排序算法【参考方案2】:

你需要实现可比较的接口

implements Comparable

完成工作的方法是

public int compareTo(Object obj)


请注意,由于可以在 implements 语句中使用通用语法(如下所示),因此 object 经常被完整的类型替换。

一个完整的例子是here in the tutorial docs希望这会有所帮助

一个完整的例子(取自上面的链接如下),我添加了这个以防链接在某个时候失效

import java.util.*;

public class Name implements Comparable<Name> 
    private final String firstName, lastName;

    public Name(String firstName, String lastName) 
        if (firstName == null || lastName == null)
            throw new NullPointerException();
        this.firstName = firstName;
        this.lastName = lastName;
    

    public String firstName()  return firstName; 
    public String lastName()   return lastName;  

    public boolean equals(Object o) 
        if (o == null || !(o instanceof Name))
            return false;
        Name n = (Name) o;
        return n.firstName.equals(firstName) && n.lastName.equals(lastName);
    

    public int hashCode() 
        return 31*firstName.hashCode() + lastName.hashCode();
    

    public String toString() 
    return firstName + " " + lastName;
    

    public int compareTo(Name n) 
        int lastCmp = lastName.compareTo(n.lastName);
        return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName));
    

文章中的客户端代码是:

import java.util.*;

public class NameSort 
    public static void main(String[] args) 
        Name nameArray[] = 
            new Name("John", "Smith"),
            new Name("Karl", "Ng"),
            new Name("Jeff", "Smith"),
            new Name("Tom", "Rich")
        ;

        List<Name> names = Arrays.asList(nameArray);
        Collections.sort(names);
        System.out.println(names);
    

【讨论】:

【参考方案3】:

您需要为此使用比较器。

【讨论】:

【参考方案4】:

根据您的问题,我认为您应该自己实现排序算法。如果是这种情况,您可以操纵 ArrayList 中元素的位置,它的工作方式与常规数组略有不同。看看add(int index, E element)index 参数让您决定在 ArrayList 中的哪个位置添加元素。

【讨论】:

我认为您想将他引导到 set 方法而不是 add 方法。 add 方法,滑动元素而不是替换它们。 @ColinD 不一定。虽然您可以用另一个元素替换一个元素,但您也可以删除一个元素,然后将其放置到新位置,这在某种程度上取决于算法。 除非你盯着一个排序数组并添加新元素,否则使用 add() 会隐藏性能损失,因为它需要移动所有具有更高索引的元素。这同样适用于 remove()。使用 set() 是更新数组中条目的 O(1) 方式,这是您想要的排序方式。【参考方案5】:

要像处理传统数组一样操作 ArrayList 的条目,请使用 ArrayList.set(int, E)。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#set%28int,%20E%29

【讨论】:

【参考方案6】:

在 Java 8 中使用 Collections.sort() 对 ArrayList 进行排序:

Collections.sort(array, new Comparator<Class>() 
    @Override
    public int compare(Class o1, Class o2) 
        //compare object properties
    
);

【讨论】:

以上是关于java如何对ArrayList中对象按照该对象某属性排序的主要内容,如果未能解决你的问题,请参考以下文章

java arraylist 按照对象的属性排序

java中list集合对象按照某一个属性分组

Java求助:如何判断某对象是不是存在?如果不存在,创建该对象

Java中如何把一组对象按照其某一个属性值进行排序?详见补充:

Java中如何对集合排序

Java中List对象集合按照对象某一属性字段排序