java中对类进行排序

java类排序(蓝桥杯必学)

我们知道c++中有时候需要对结构体进行一些排序

可以直接调用sort(数组,排序方法);

而java中有时候需要对类进行指定的排序~

前导知识:

数组:(不论是int,char,String类型的数组)都调用 Arrays . sort() 排序即可

结构体: 首先要将它存放在集合中,在对其进行排序,调用 Collections . sort()排序,此时需要重新构造排序方法(但是例如TreeMap , TreeSet , PriorityQueue,等自带排序的集合,需要在初始化时就对其进行排序重写 )

对应习题:

牛客面试题库NC 37

方法如下:

类:

class person{
	int age;
	String name;
	person(){}
	person(int age,String name){
	this.age=age;
	this.name=name;
	}
}

方法1:(这种lambda表达式只能支持,根据结构体中单独一个元素进行排序):

public class Solution{
	public ArrayList<person> merge(ArrayList<person> persons){
		ArrayList<person> res=new ArrayList<>();
		//排序方式:(根据类中年龄升序排序)
        //解释:对persons(person类)变量进行排序,a与b是两个person类的变量,若a.age-b.age>0则a排在b前,否则b排在a前(升序)
		Collections.sort(persons,(a,b)->a.age-b.age);
		for(int i=0;i<persons.size();i++){
			res.add(persons.get(i));
		}
		return res;
	}
}

方法2:(针对不自带排序的集合进行排序重写):

public class Solution{
	public ArrayList<person> merge(ArrayList<person> persons){
		ArrayList<person> res=new ArrayList<>();
		Collections.sort(res,new Comparator<person>(){
            @Override
            public int compare(person p1,person p2){
                int r1=p1.age-p2.age;
                if(r1!=0)return r1;
                return p1.name.compareTo(p2.name);
            }
        });
		for(int i=0;i<persons.size();i++){
			res.add(persons.get(i));
		}
		return res;
	}
}

方法3:(针对自带排序的结合进行排序重写)

public class Solution{
	public TreeSet<person> merge(TreeSet<person> persons){
		TreeSet<person> res=new TreeSet<>(new Comparator<Person>(){
            @override
               public int compare(person p1,person p2){
                int r1=p1.age-p2.age;
                if(r1!=0)return r1;
                return p1.name.compareTo(p2.name);
            }
        });
		for(int i=0;i<persons.size();i++){
			res.add(persons.get(i));
		}d
		return res;
	}
}
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值