java集合按大小排序_List集合对象中按照不同属性大小排序的实例

实例如下:

package com.huad.luck;

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

person p = new person();

p.setname("tom");

p.setage(11);

person p1 = new person();

p1.setname("lilei");

p1.setage(19);

person p2 = new person();

p2.setname("json");

p2.setage(15);

list list =new arraylist();

list.add(p);

list.add(p1);

list.add(p2);

collections.sort(list,new comparator() {

//这里可以再person中实现 comparator接口,重写compare方法

@override

public int compare(person o1, person o2) {

//这里按照名字排序

return o1.getname().compareto(o2.getname());

//这里按照age排序

//return (o1.getage()+"").compareto(o2.getage()+"");

//。。。根据不同属性值排序

}

});

for (int i = 0; i < list.size(); i++) {

system.out.println(list.get(i).getname());

}

}

}

//person类

package com.huad.luck;

public class person{

private string name ;

private int age;

public person(string name , int age) {

this.name = name;

this.age = age;

}

public person( ) {

}

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;

}

}

用collection.sort()方法对list集合排序

第一种是list中的对象实现comparable接口,如下:

/**

* 根据order对user排序

*/

public class user implements comparable{

private string name;

private integer order;

public string getname() {

return name;

}

public void setname(string name) {

this.name = name;

}

public integer getorder() {

return order;

}

public void setorder(integer order) {

this.order = order;

}

public int compareto(user arg0) {

return this.getorder().compareto(arg0.getorder());

}

}

测试一下:

public class test{

public static void main(string[] args) {

user user1 = new user();

user1.setname("a");

user1.setorder(1);

user user2 = new user();

user2.setname("b");

user2.setorder(2);

list list = new arraylist();

//此处add user2再add user1

list.add(user2);

list.add(user1);

collections.sort(list);

for(user u : list){

system.out.println(u.getname());

}

}

}

输出结果如下

a

b

第二种方法是根据collections.sort重载方法来实现,例如:

/**

* 根据order对user排序

*/

public class user { //此处无需实现comparable接口

private string name;

private integer order;

public string getname() {

return name;

}

public void setname(string name) {

this.name = name;

}

public integer getorder() {

return order;

}

public void setorder(integer order) {

this.order = order;

}

}

主类中这样写即可:

public class test{

public static void main(string[] args) {

user user1 = new user();

user1.setname("a");

user1.setorder(1);

user user2 = new user();

user2.setname("b");

user2.setorder(2);

list list = new arraylist();

list.add(user2);

list.add(user1);

collections.sort(list,new comparator(){

public int compare(user arg0, user arg1) {

return arg0.getorder().compareto(arg1.getorder());

}

});

for(user u : list){

system.out.println(u.getname());

}

}

}

输出结果如下

a

b

前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁

多字段的场合:

collections.sort(list,new comparator(){

public int compare(user arg0, user arg1) {

// 第一次比较专业

int i = arg0.getorder().compareto(arg1.getorder());

// 如果专业相同则进行第二次比较

if(i==0){

// 第二次比较

int j=arg0.getxxx().compareto(arg1.getxxx());

// 如果学制相同则返回按年龄排序

if(j==0){

return arg0.getccc().compareto(arg1.getccc());

}

return j;

}

return i;

}

});

以下是另外一个例子

package test;

import java.util.arraylist;

import java.util.collections;

import java.util.comparator;

public class arraylisttest {

public static void main(string[] args) {

arraylist arraylist = new arraylist() ;

arraylist.add(new exmployee("zengqiang",new integer(5000))) ;

arraylist.add(new exmployee("zengmin",new integer(4000))) ;

arraylist.add(new exmployee("liuxiaojuan",new integer(4200))) ;

arraylist.add(new exmployee("giuming",new integer(2200))) ;

collections.sort(arraylist, new comparator(){

public int compare(exmployee arg0, exmployee arg1) {

return arg1.getsalary()-arg0.getsalary() ; //按照工资升序

//return arg0.getsalary()-arg1.getsalary() ; 按照工资降序

//return arg0.getname().compareto(arg1.getname()) ; 按照姓名升序

}

});

for(exmployee e:arraylist)

system.out.println(e.getname()+"'s salary is "+e.getsalary()) ;

}

}

class exmployee {

public exmployee(string name, int salary) {

this.name = name ;

this.salary = salary ;

}

private string name;

public string getname() {

return name;

}

public void setname(string name) {

this.name = name;

}

public int getsalary() {

return salary;

}

public void setsalary(int salary) {

this.salary = salary;

}

private int salary;

}

以上这篇list集合对象中按照不同属性大小排序的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值