这是自己的第一篇博客,话说学习是50%的学习,另外50%是解释,以后会分享自己遇到的一些问题,欢迎各位大佬指教。
今天在进行数据处理时遇到了对象数组排序的问题,现总结如下:
一.链表中存放的数据是字符串数据
二.链表中存放的数据是对象数据
三. Java比较器Comparable和Comparator的区别
一.链表中存放的数据是字符串数据
1.可以直接使用Collections.sort(list)的方法来对字符串按字典序进行排序,以及利用Collections.reverse(list)来进行字典倒序排序。(因为String类已经实现了Comparable接口)
ArrayList list=new ArrayList();
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
ArrayList list=new ArrayList();
list.add("123");
list.add("2");
list.add("13");
Collections.sort(list,new Comparator() {
public int compare(String o1,String o2)
{
int flag=1;
if(Integer.parseInt(o1) 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 list2=new ArrayList();
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() {
public int compare(Count o1,Count o2)
{
int flag=-1;
if(Integer.parseInt(o1.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()) flag=-1;
if(Integer.parseInt(this.getNumber())==Integer.parseInt(s.getNumber()))
flag=0;
return flag;
}
}
ArrayList list2=new ArrayList();
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);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/143904.html