「java对象字段排序」java对对象多个属性进行排序

博主:adminadmin 2022-11-30 12:27:10 63

本篇文章给大家谈谈java对象字段排序,以及java对对象多个属性进行排序对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java list 相同的字段排序

1. 集合类List存放的数据,默认是按照放入顺序排序的。我们也可以对list中某一个元素进行排序。例如;

package test.tool.gui.dbtool.util;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

public class Test {

public static void main(String[] args) {

List list = new ArrayList();

2.创建3个学生对象,年龄分别是20、19、21,并将他们依次放入List中

Student s1 = new Student();

s1.setAge(20);

Student s2 = new Student();

s2.setAge(19);

Student s3 = new Student();

s3.setAge(21);

list.add(s1);

list.add(s2);

list.add(s3);

System.out.println("排序前:"+list);

Collections.sort(list, new Comparator(){

public int compare(Student o1, Student o2) {

//按照学生的年龄进行升序排列

if(o1.getAge() o2.getAge()){

return 1;

}

if(o1.getAge() == o2.getAge()){

return 0;

}

return -1;

}

});

System.out.println("排序后:"+list);

}

}

class Student{

private int age;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return getAge()+"";

}

}

Java怎样用数组创建对象,并对对象里的属性排序?

public class Employee {

public Employee() {

super();

// TODO Auto-generated constructor stub

}

public Employee(String no, String name, Float salary) {

super();

this.no = no;

this.name = name;

this.salary = salary;

}

private String no;// 工号

private String name;// 姓名

private Float salary = 0f;// 工资

public String getNo() {

return no;

}

public void setNo(String no) {

this.no = no;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Float getSalary() {

return salary;

}

public void setSalary(Float salary) {

this.salary = salary;

}

@Override

public String toString() {

return "Employee [no=" + no + ", name=" + name + ", salary=" + salary + "]";

}

}

public class TestEmployee {

public static void main(String[] args) {

TestEmployee testEmployee = new TestEmployee();

Employee[] emps = testEmployee.getEmployees();

emps = testEmployee.orderBySalary(emps);

for(int i = 0; i  emps.length; i++) {

System.out.println(emps[i]);

}

}

/**

 * 获取一个随机工资数 3-5K

 * @return

 */

public Float getRandomFloat() {

DecimalFormat dcmFmt = new DecimalFormat("0.00");

Random rand = new Random();

float f = 0f;

while(f  3000) {

f = rand.nextFloat() * 5000;

}

return Float.parseFloat(dcmFmt.format(f));

}

/**

 * 获取员工

 * @return 返回Employee[] 数组  length = 50

 */

public Employee[] getEmployees() {

Employee[] emps = new Employee[50];

for(int i = 0; i  50 ; i++) {

String no = "no" + i;// 初始化员工号

String name = "name" + i;// 初始化姓名

Float salary = getRandomFloat();// 随机产生一个工资数

emps[i] = new Employee(no, name, salary);

}

return emps;

}

/**

 * 根据工资高低 进行排序

 * @param emps

 * @return

 */

public Employee[] orderBySalary(Employee[] emps) {

for(int i = 0; i  emps.length; i++) {

for(int j = i + 1; j  emps.length; j++) {

if(emps[i].getSalary()  emps[j].getSalary()) {

Employee temp = emps[i];

emps[i] = emps[j];

emps[j] = temp;

}

}

}

return emps;

}

}

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(ListCar 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) {

ListCar list = new ArrayListCar();

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的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 "Perosn [name=" + name + ", age=" + age + "]";

}

}

public class App {

 

    public static void main(String[] args) {

    

     ListStudent 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中怎么给一个对象排序

Comparable 是一个自身以前支持自比拟的(如String ,Integer) 的接口 Comparator 可以说是一个 自用的比拟器 当对象自身 不支持自排序和自比拟函数的时辰 咱们可以议决完成Compartor 来比拟两对象的大小 Comparable 是一个比拟通用的接口 用户可以议决他完成 排序功用 而Comparator 可以看作一种算法 一种设计方式 (可以看作是一个战略方式 就是不改动对象自身,而用一个战略对象改动对象行为) Comparable 相比拟较固定 与详细类绑定 , Comparator 比拟灵敏 可以与任何须要完成功用的类 绑定 Comparable 可以说是 静态绑定 Comparator 可以说是静态绑定 Comparable 此接口强行对完成它的每个类的对象执行全体排序。此排序被称为该类的自然排序,类的 compareTo 方法被称为它的自然比拟方法。 完成此接口的对象列表(和数组)可以议决 Collections.sort(和 Arrays.sort)执行自动排序。完成此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比拟器。 关于类 C 的每一个 e1 和 e2 来说,当且仅当 (e1.compareTo((Object)e2) == 0) 与 e1.equals((Object)e2) 具有类似的布尔值时,类 C 的自然排序才叫做与 equals 一致。留意,null 不是任何类的实例,即便 e.equals(null) 前往 false,e.compareTo(null) 也会抛出 NullPointerException。 剧烈推荐(虽然不是必需的)使自然排序与 equals 一致。这是由于在运用其自然排序与 equals 不一致的元素(或键)时,没有显式比拟器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违犯了依据 equals 方法定义的集合(或映射表)的惯例协议。 而Comparator 比拟函数强行对某些对象 collection 执行全体排序。可以将 Comparator 传递给 sort 方法(如 Collections.sort),从而准许在排序顺序上完成精确控制。还可以运用 Comparator 来控制某些数据结构(如 TreeSet 或 TreeMap)的顺序。

java怎样对集合按照实体类的字段排序

import java.util.Comparator;

import java.util.TreeSet;

/*

 * 需求:请按照姓名的长度排序

 * 

 * TreeSet集合保证元素排序和唯一性的原理

 * 唯一性:是根据比较的返回是否是0来决定。

 * 排序:

 *  A:自然排序(元素具备比较性)

 *  让元素所属的类实现自然排序接口 Comparable

 *  B:比较器排序(集合具备比较性)

 *  让集合的构造方法接收一个比较器接口的子类对象 Comparator

 */

public class TreeSetDemo {

public static void main(String[] args) {

// 创建集合对象

// TreeSetStudent ts = new TreeSetStudent(); //自然排序

// public TreeSet(Comparator comparator) //比较器排序

// TreeSetStudent ts = new TreeSetStudent(new MyComparator());

// 如果一个方法的参数是接口,那么真正要的是接口的实现类的对象

// 而匿名内部类就可以实现这个东西

TreeSetStudent ts = new TreeSetStudent(new ComparatorStudent() {

@Override

public int compare(Student s1, Student s2) {

// 姓名长度

int num = s1.getName().length() - s2.getName().length();

// 姓名内容

int num2 = num == 0 ? s1.getName().compareTo(s2.getName())

: num;

// 年龄

int num3 = num2 == 0 ? s1.getAge() - s2.getAge() : num2;

return num3;

}

});

// 创建元素

Student s1 = new Student("linqingxia", 27);

Student s2 = new Student("zhangguorong", 29);

Student s3 = new Student("wanglihong", 23);

Student s4 = new Student("linqingxia", 27);

Student s5 = new Student("liushishi", 22);

Student s6 = new Student("wuqilong", 40);

Student s7 = new Student("fengqingy", 22);

Student s8 = new Student("linqingxia", 29);

// 添加元素

ts.add(s1);

ts.add(s2);

ts.add(s3);

ts.add(s4);

ts.add(s5);

ts.add(s6);

ts.add(s7);

ts.add(s8);

// 遍历

for (Student s : ts) {

System.out.println(s.getName() + "---" + s.getAge());

}

}

}

java对象字段排序的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java对对象多个属性进行排序、java对象字段排序的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-30,除非注明,否则均为首码项目网原创文章,转载请注明出处。