排序分为两种
1. 自然排序:自定义类需实现Comparable接口,依据CompareTo方法,确定按照哪一个或哪几个属性排序,如果返回值为0,则表示两个自定义对象相同,(如果需要降序,就在CompareTo的返回值前面加一个“-”号)。【如果可以操作一个类,就用自然排序】
2. 定制排序:实现Comparator接口,在重写compare方法时指明按照自定义类的哪个属性排序,并生成一个对象;【如果不可以操作一个类,就用定制排序】
两种排序都要使用Collections.sort()来排序。
基本用法如下:
list升序,降序,逆序
List<Integer>
list =new ArrayList<Integer>
();
//如果list是 5 7 2 6 8 1 4
1、升序:
Collections.sort(list) //list: 1 2 4 5 6 7 8
2、降序:
Collections.sort(list,Collections.reverseOrder())//list:8 7 6 5 4 2 1
3、逆序:
Collections.reverse(list)//list:4 1 8 6 2 7 5
数组升序,降序
int[] a={5 7 2 6 8 1 4}
1、升序:
Arrays.sort(a)//a: 1 2 4 5 6 7 8
2、降序:
Arrays.sort(a,Collections.reverseOrder())//a: 8 7 6 5 4 2 1
补充:
Arrays.asList(数组)//将数组转成list
Arrays.asList(a);
List<Integer>
list =new ArrayList<Integer>
(Arrays.asList(a));
例子
Collections使用sort(List) 根据元素的自然顺序对指定List 集合元素按升序排序;
Collections使用 sort(List,Comparator) 根据指定的Comparator 产生的顺序对 List 集合元素进行排序。
使用sort(List)
@Test
public void test1(){ //排序操作
List ls=new ArrayList();
ls.add(82);
ls.add(93);
ls.add(34);
ls.add(25);
ls.add(46);
ls.add(27);
Collections.sort(ls);
for(Object o:ls)
System.out.println(o);
}
使用 sort(List,Comparator)
Customer类
public class Customer {
String id;
String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Customer() {
super();
}
public Customer(String id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + "]";
}
}
测试类,实现Comparator接口实现排序
@Test
public void testOrder(){
List lps=new ArrayList<Customer>();
for(Integer i=0;i<10;i++){
lps.add(new Customer(i.toString(),i+"name"));
}
Collections.sort(lps,new Comparator<Customer>() {
@Override
public int compare(Customer c1, Customer c2) {
//升序
return c1.getName().compareTo(c2.getName());
//降序
//return c2.getName().compareTo(c1.getName());
}
});
Iterator is = lps.iterator();
while(is.hasNext()){
System.out.println(is.next());
}
}
使用sort(List)并在类中实现Comparable接口
Person类
public class Person implements Comparable{
String name;
Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Deprecated
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", getName()=" + getName() + ", getAge()=" + getAge()
+ ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
+ "]";
}
public Person() {
super();
}
@Override
public int compareTo(Object o) {
if(o instanceof Person){
Person p=(Person) o;
int i=this.name.compareTo(p.name);
if(i==0){
i=this.age.compareTo(p.age);
return i;
}else{
return i;
}
}
return 0;
}
}
测试类
@Test
public void testOrder2(){
List lps=new ArrayList<Person>();
for(Integer i=0;i<10;i++){
lps.add(new Person(i+"name",i*10+i));
}
Collections.sort(lps);
Iterator is = lps.iterator();
while(is.hasNext()){
System.out.println(is.next());
}
}