java類排序(藍(lán)橋杯必學(xué))
我們知道c++中有時(shí)候需要對(duì)結(jié)構(gòu)體進(jìn)行一些排序
可以直接調(diào)用sort(數(shù)組,排序方法);
而java中有時(shí)候需要對(duì)類進(jìn)行指定的排序~
前導(dǎo)知識(shí):
數(shù)組:(不論是int,char,String類型的數(shù)組)都調(diào)用 Arrays . sort() 排序即可
結(jié)構(gòu)體: 首先要將它存放在集合中,在對(duì)其進(jìn)行排序,調(diào)用 Collections . sort()排序,此時(shí)需要重新構(gòu)造排序方法(但是例如TreeMap , TreeSet , PriorityQueue,等自帶排序的集合,需要在初始化時(shí)就對(duì)其進(jìn)行排序重寫 )
對(duì)應(yīng)習(xí)題:
方法如下:
類:
class person{
int age;
String name;
person(){}
person(int age,String name){
this.age=age;
this.name=name;
}
}
方法1:(這種lambda表達(dá)式只能支持,根據(jù)結(jié)構(gòu)體中單獨(dú)一個(gè)元素進(jìn)行排序):
public class Solution{
public ArrayList merge(ArrayList persons){
ArrayList res=new ArrayList();
//排序方式:(根據(jù)類中年齡升序排序)
//解釋:對(duì)persons(person類)變量進(jìn)行排序,a與b是兩個(gè)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:(針對(duì)不自帶排序的集合進(jìn)行排序重寫):
public class Solution{
public ArrayList merge(ArrayList persons){
ArrayList res=new ArrayList();
Collections.sort(res,new Comparator(){
@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:(針對(duì)自帶排序的結(jié)合進(jìn)行排序重寫)
public class Solution{
public TreeSet merge(TreeSet persons){
TreeSet res=new TreeSet(new Comparator(){
@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;
}
}