大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
这是自己的第一篇博客,话说学习是50%的学习,另外50%是解释,以后会分享自己遇到的一些问题,欢迎各位大佬指教。
今天在进行数据处理时遇到了对象数组排序的问题,现总结如下:
一.链表中存放的数据是字符串数据
1.可以直接使用Collections.sort(list)的方法来对字符串按字典序进行排序,以及利用Collections.reverse(list)来进行字典倒序排序。(因为String类已经实现了Comparable接口)
ArrayList<String> list=new ArrayList<String>();
list.add("123");
list.add("2");
list.add("13");
Collections.sort(list);
2.如果上面的排序不能满足我们的要求,那么我们需要去自定义排序方法对集合进行排序,自定义排序需要实现Comparator接口,并重写排序方法int compare(String s1,String s2)
(Comparator接口中有一个方法int compare(T s1,t s2)。这个方法返回值为int,说明比较结果s1和s2,如果返回值小于0,则s1<s2;返回值等于0,s1=s2;返回值大于0,s1>s2)
ArrayList<String> list=new ArrayList<String>();
list.add("123");
list.add("2");
list.add("13");
Collections.sort(list,new Comparator<String>() {
public int compare(String o1,String o2)
{
int flag=1;
if(Integer.parseInt(o1)<Integer.parseInt(o2))
flag=-1;
if(Integer.parseInt(o1)==Integer.parseInt(o2))
flag=0;
return flag;
}
});
二.链表中存放的数据是对象数据
这种情况和链表中存放的数据是String类型,笔者认为处理方式如出一辙,只不过要在对象的基础上找到某一成员变量,然后根据其进行排序。例:对Count对象的number按照数据大小升序排列。按降序排列只需要处理compare方法即可。
public class Count{
private String number;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}}
ArrayList<Count> list2=new ArrayList<Count>();
Count a=new Count();a.setNumber("13");list2.add(a);
Count b=new Count();b.setNumber("123");list2.add(b);
Count c=new Count();c.setNumber("2");list2.add(c);
Collections.sort(list2);
Collections.sort(list2,new Comparator<Count>() {
public int compare(Count o1,Count o2)
{
int flag=-1;
if(Integer.parseInt(o1.getNumber())<Integer.parseInt(o2.getNumber()))
flag=1;
if(Integer.parseInt(o1.getNumber())==Integer.parseInt(o2.getNumber()))
flag=0;
return flag;
}
});
三. Java比较器Comparable和Comparator的区别
比较器在对对象数组排序时至关重要,二者有一定的区别。因为Comparable接口是在设计类时,考虑到让类去实现该接口,如果在设计类时没有考虑到,那就可以通过Comparator来实现排序功能;这两个接口需要重写的方法区别之处:Comparable接口对应排序方法为int compareTo(Object b),返回值取值代表大小比较和int Compare(T s1,t s2)相同,显而易见二者参数个数不同。下面举一个利用Comparable的例子:
package dateProcess;
public class Count implements Comparable{
private String number;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public int compareTo(Object b)
{
Count s=(Count) b;
int flag=1;
if(Integer.parseInt(this.getNumber())<Integer.parseInt(s.getNumber()))
flag=-1;
if(Integer.parseInt(this.getNumber())==Integer.parseInt(s.getNumber()))
flag=0;
return flag;
}
}
ArrayList<Count> list2=new ArrayList<Count>();
Count a=new Count();a.setNumber("13");list2.add(a);
Count b=new Count();b.setNumber("123");list2.add(b);
Count c=new Count();c.setNumber("2");list2.add(c);
Collections.sort(list2);
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183236.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...