java中将对象集合排序(java集合中的排序是怎么实现的)

发布时间:2022-11-09

本文目录一览:

  1. java 如何对对象进行排序
  2. Java中怎么给一个对象排序
  3. java的list集合如何根据对象中的某个字段排序
  4. 怎么用java程序对集合里的对象按对象的某个属性排序,这个属性是日期(YYYY-MM-DD hh:mm),最好有个例子。
  5. java集合框架中如何实现对对象的排序

java 如何对对象进行排序

纠正几点错误: 首先 TreeSet 就是一个二叉树排序容器,由用户定义对象比较规则,然后接口回调进行排序,也就是说当对象在 add 到容器后实际上已经按照你定义的排序规则排序完毕了,所以你也没有必要再单独写一个排序方法。 如果你想单独写一个排序算法,传入 TreeSet() 这样已经排序完毕的容器当然是多此一举的。你可以用 List 保存你的对象,这样容器保存的就是原始的对象集合(按 add() 的先后顺序排序),这样才能真正发挥排序方法的功能。 其次,你的冒泡排序算法是按照价格从小到大的,而你 add 对象的时候就是从小到大的,所以一直没有满足 if (iArr[j].price > iArr[j+1].price) 这个条件,可以把 > 号改成 < 号,或者打乱 add 的顺序,这样就能看出效果。 另外从容器内取元素应该用循环,而不应该写死。你应该知道,所以程序我也没修改~ 下面的程序在原作上面稍微修改了一下,自己可以比较一下区别:

package cn.com.csuinfo.Mycollec;
import java.util.ArrayList;
import java.util.List;
public class TestMySort {
    public void BubbleSort(List<Car> list) {
        Car c1;
        Car c2;
        Car c3;
        Car c4;
        c1 = list.get(0); // 将set中的元素一个个取出来,再存入Car数组中
        c2 = list.get(1);
        c3 = list.get(2);
        c4 = list.get(3);
        Car[] iArr = { c1, c2, c3, c4 }; // 数组中存放了Car类型的四个对象
        Car tmp = null;
        int len = list.size();
        for (int i = 0; i < len - 1; i++) { // 对数组中的对象按属性值price的大小进行排序
            for (int j = 0; j < len - 1 - i; j++) {
                if (iArr[j].price > iArr[j + 1].price) {
                    tmp = iArr[j];
                    iArr[j] = iArr[j + 1];
                    iArr[j + 1] = tmp;
                    System.out.println("change"); // 测试之注意!:程序没执行到此来???
                }
            }
        }
        for (Car car : iArr) {
            System.out.println(car);
        }
    }
    public static void main(String[] args) {
        List<Car> list = new ArrayList<Car>();
        Car car1 = new Car("Ford", 164000);
        Car car2 = new Car("Honda", 286000);
        Car car3 = new Car("Toyota", 410000);
        Car car4 = new Car("Benz", 850000);
        list.add(car1);
        list.add(car2);
        list.add(car3);
        list.add(car4);
        System.out.println("***********************");
        new TestMySort().BubbleSort(list);
    }
}

Java中怎么给一个对象排序

Comparable 是一个自身以前支持自比较的(如 String, Integer) 的接口。Comparator 可以说是一个自用的比较器。当对象自身不支持自排序和自比较函数的时候,我们可以实现 Comparator 来比较两个对象的大小。 Comparable 是一个比较通用的接口,用户可以通过它完成排序功能。而 Comparator 可以看作是一种算法,一种设计模式(可以看作是一个策略模式,就是不改变对象自身,而用一个策略对象改变对象行为)。 Comparable 相比来说比较固定,与具体类绑定;Comparator 比较灵活,可以与任何需要完成功能的类绑定。Comparable 可以说是静态绑定,Comparator 可以说是动态绑定。 Comparable 此接口强制对实现它的每个类的对象执行整体排序。此排序被称为该类的自然排序,类的 compareTo 方法被称为它的自然比较方法。实现此接口的对象列表(和数组)可以使用 Collections.sort(和 Arrays.sort)执行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 对于类 C 的每一个 e1e2 来说,当且仅当 (e1.compareTo((Object)e2) == 0)e1.equals((Object)e2) 具有相同的布尔值时,类 C 的自然排序才叫做与 equals 一致。注意,null 不是任何类的实例,即使 e.equals(null) 返回 falsee.compareTo(null) 也会抛出 NullPointerException。 强烈推荐(虽然不是必须的)使自然排序与 equals 一致。这是因为在使用其自然排序与 equals 不一致的元素(或键)时,没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违反了根据 equals 方法定义的集合(或映射表)的常规协议。 而 Comparator 比较函数强制对某些对象集合执行整体排序。可以将 Comparator 传递给 sort 方法(如 Collections.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如 TreeSetTreeMap)的顺序。

java的list集合如何根据对象中的某个字段排序

下面的代码是根据学生年龄排序学生 List 的一个例子:

import java.util.ArrayList;
import java.util.List;
class Student {
    private String name;
    private int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
}
public class App {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("abc", 12));
        students.add(new Student("bcd", 20));
        students.add(new Student("cde", 17));
        students.add(new Student("def", 25));
        students.add(new Student("efg", 15));
        students.sort((x, y) -> Integer.compare(x.getAge(), y.getAge()));
        for (Student stu : students) {
            System.out.println(stu);
        }
    }
}

运行结果:

怎么用java程序对集合里的对象按对象的某个属性排序,这个属性是日期(YYYY-MM-DD hh:mm),最好有个例子。

你的对象要实现 Comparable 接口:

class MyBean implements Comparable<MyBean> {
    private Date sortKey;
    public Date getSortKey() {
        return sortKey;
    }
    public void setSortKey(Date sortKey) {
        this.sortKey = sortKey;
    }
    @Override
    public int compareTo(MyBean o) {
        return this.sortKey.compareTo(o.getSortKey());
    }
}

然后直接调用 Collections.sort(list);

public static void main(String[] args) throws ParseException {
    List<MyBean> list = new ArrayList<MyBean>();
    Collections.sort(list);
}

java集合框架中如何实现对对象的排序

Collections.sort(listA, new Comparator<Person>() {
    public int compare(Person arg0, Person arg1) {
        return arg0.getOrder().compareTo(arg1.getOrder());
    }
});

第一个参数 listA 是你要排序的集合,第二个是一个比较器,Person 表示你 listA 中类的类型,compare 方法表示你要怎么对 Person 对象排序,比如这里是按 Personorder 属性。