一. java提供的默认list排序方法
主要代码:
List list=new ArrayList (;
list.add (纯真的小笼包);
刘媛媛list.add;
list.add (黄鳝);
list.add(CQDBM );
//升序
collections.sort(list,collator.getinstance ) Java.util.locale.China; //注意:是按照的汉字拼音字母排序的,不是汉字一般的排序方法
for(intI=0; I
{
system.out.print(list.get(I ) ';
}
System.out.println (' ' ); //cqdbm鳖包刘媛媛纯真小笼包
//降序
collections.reverse(list; //如果未指定排序规则,也会按字母顺序排序
for(intI=0; I
{
system.out.print(list.get(I ) ';
}
System.out.println (' ' ); //纯真小笼包刘媛鳗鱼包cqdbm
2 .定制排序规则
(第一个是model类安装Comparable接口,并重写intcompareto(objecto )方法
publicclassstudentimplementscomparable {
私有字符串名称;
私有输入;
公共字符串获取名称
return name;
}
公共void set name (string name ) {
this.name=name;
}
公共获取页面() {
返回age;
}
公共语音设置(intage ) {
this.age=age;
}
@Override
公共公司到(objecto ) {
//todo自动生成方法stub
studentsdto=(student ) o;
//以姓名为第一关键字,以年龄为第二关键字按升序排序。
int i=0;
I=name.comPareto(sdto.name ); //使用字符串进行比较
if(I==0) )//如果名字相同,则比较年龄,返回年龄比较的结果
return age - sdto.age;
} else {
return i; 因为名字不同,所以返回比较名字的结果。
}
}
}
List studentList=new ArrayList (;
Student s1=new Student (;
S1.setname(Yuanyuan );
S1.setage(22;
sudentlist.add(S1;
Student s2=new Student (;
S2.setname(kddjmg );
S2.setage(25;
sudentlist.add(S2;
Student s3=new Student (;
S3.setname(Yuanyuan );
S3.setage(23;
sudentlist.add(S3;
collections.sort(studentlist;
system.out.print('n ' );
后台3360后台列表(for ) {
system.out.println (student.get age () ' : ' student.getName ) );
}
结果:
25 : kddjmg
22 :元元
23 :元元
)二是比较器类安装Comparator接口,改写intcompare(objecto1,Object o2 )的方法。 (策略设计模式)
如果类本身不支持排序(也就是说,没有实现Comparable接口),则必须控制类的顺序,然后可以为此类创建比较器并对其进行排序。 这个比较器只是实现Comparator接口。
实现namely,Comparator类以创建新的比较器,并按该比较器对类进行排序。 公司界面其实是战略模式的实践
比较器类:
publicclassstudentcomparatorimplementscomparator {
@Override
公共输入公司(Object o2,Object o2 ) {
//todo自动生成方法stub
studentone=(student ) o1;
sudentanother=(student ) o2;
int i=0;
i=one.getName ().comPareto ) (another.getname ) ); //使用字符串进行比较
if(I==0) )//如果名字相同,则比较年龄,返回年龄比较的结果
return one.get age (-another.get age );
} else {
return i; 因为名字不同,所以返回比较名字的结果。
}
}
}
List studentList=new ArrayList (;
Student s1=new Student (;
S1.setname(Yuanyuan );
S1.setage(22;
sudentlist.add(S1;
Student s2=new Student (;
S2.setname(kddjmg );
S2.setage(25;
sudentlist.add(S2;
Student s3=new Student (;
S3.setname(Yuanyuan );
S3.setage(23;
sudentlist.add(S3;
collections.sort(studentlist,new StudentComparator () );
system.out.print('n ' );
后台3360后台列表(for ) {
system.out.println (student.get age () ' :' student.getName ) );
}
}
结果: 25 : kddjmg
22 :元元
23 :元元
比较Comparable和Comparator
Comparable是一个排序接口; 如果类实现了Comparable接口,则表示“该类支持排序”。
Comparator是比较器; 如果需要控制类的顺序,可以创建“类比较器”并对其进行排序。
前者是相对固定的,应该与特定的类联系在一起,但后者相对灵活,可以用于需要比较功能的各级。 可以说前者是“静态绑定”,而后者是“动态绑定”。
可见Comparable相当于“内部比较器”,Comparator相当于“外部比较器”。
地图转换为列表进行排序
publicstringcreatestring (map params ) list keys=new ArrayList (params.keyset ); collections.sort(keys; String prestr=' '; for(intI=0; i keys.size (; I ) {stringkey=keys.get(I ); stringvalue=Params.get(key ); if(I==keys.size(-1 ) {/prestr=prestr key '=' value; } else { prestr=prestr key '=' value '; } } return prestr; }