一、直接调用Collections.sort()方法进行排序
1.对字母集合进行排序
Collections.sort(要排序的集合对象);
public class LetterListSort {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
List list = new ArrayList();
list.add("sdfsdf");
list.add("asdafdf");
list.add("tdsadfgf");
list.add("jcfgf");
list.add("jbgh");
Collections.sort(list);
for (Object object : list) {
System.out.println(object);
}
}
}
根据以下排序结果可见对于字母进行排序首先会对首字母、第二个字母依次进行排序(若jcfgf中的c变成b,jbgh中的b变成c排序结果将会不同):测试结果
asdafdf
jbgh
jcfgf
sdfsdf
tdsadfgf
2.对数字集合进行排序
Collections.sort(要排序的集合对象);
public class NumberListSort {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
List list = new ArrayList();
list.add("122");
list.add("456");
list.add("152");
list.add("1223");
list.add("12321");
Collections.sort(list);
for (Object object : list) {
System.out.println(object);
}
}
}
根据以下排序结果可见:直接调用Collections.sort方法 对数字进行排序首先会对首位数字、第二个数字依次进行排序而不在乎值的实迹大小:测试结果
122
1223
12321
152
456
二、自定义排序方式实体类需要实现Comparable接口中的compareTo()方法
public class mm implements Comparable<mm>{
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public mm() {
super();
}
public mm(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "[name=" + name + ", age=" + age + "]";
}
public int compareTo(mm o) {
if(o instanceof mm) {
mm m1=o;
return this.name.compareTo(m1.getName()); //对字母进行正序排列
//return m1.getName().compareTo(name); //对字母进行倒序排列
//return this.age-m1.getAge(); //对数字进行正序排列
//return m1.getAge()-this.age; //对数字进行倒序排列
}
throw new ClassCastException();
}
}
1.直接排序(解开以上代码中对应的排序方式即可)
return this.name.compareTo(m1.getName()); //对字母进行正序排列
//return m1.getName().compareTo(name); //对字母进行倒序排列
//return this.age-m1.getAge(); //对数字进行正序排列
//return m1.getAge()-this.age; //对数字进行倒序排列
1.1****测试类代码
public class ListSort {
@SuppressWarnings("rawtypes")
static List list = new ArrayList();
@SuppressWarnings("unchecked")
@BeforeClass//junit单元测试依赖支持
public static void init() {
list.add(new mm("fsdfsd",17721));
list.add(new mm("dsdfsd",186));
list.add(new mm("asdfsd",1335));
list.add(new mm("esdfsd",133));
}
@SuppressWarnings("unchecked")
@Test
public void sorts() {
Collections.sort(list);
for (Object object : list) {
System.out.println(object);
}
}
}
1.2 return this.name.compareTo(m1.getName()); //对字母进行正序排列:测试结果
[name=asdfsd, age=1335]
[name=dsdfsd, age=186]
[name=esdfsd, age=133]
[name=fsdfsd, age=17721]
1.3 return this.age-m1.getAge(); //对数字进行正序排列:测试结果
[name=esdfsd, age=133]
[name=dsdfsd, age=186]
[name=asdfsd, age=1335]
[name=fsdfsd, age=17721]
三、匿名内部类排序方式 需要new Comparator并重写compare方法自定义排序
public class ListSort {
@SuppressWarnings("rawtypes")
static List list = new ArrayList();
@SuppressWarnings("unchecked")
@BeforeClass
public static void init() {
list.add(new mm("fsdfsd",17721));
list.add(new mm("dsdfsd",186));
list.add(new mm("asdfsd",1335));
list.add(new mm("esdfsd",133));
}
@SuppressWarnings("unchecked")
@Test
public void sort() {
//关键代码实现
Collections.sort(list, new Comparator<mm>() {
public int compare(mm o1, mm o2) {
if(o1 instanceof mm && o2 instanceof mm) {
mm m1 = o1;
mm m2 = o2;
return m1.getAge().compareTo(m2.getAge()); //根据age进行正序排列
//return m2.getAge().compareTo(m1.getAge()); //根据age进行倒序排列
//return m1.getName().compareTo(m2.getName()); //根据name进行正序排列
//return m2.getName().compareTo(m1.getName()); //根据name进行倒序排列
}
throw new ClassCastException("不能转换为对象");
}
});
for (Object object : list) {
System.out.println(object);
}
}
}
根据以下age排序结果表明重写后的排序方式数字会按照实迹数值的大小进行排序
1.1 return m1.getAge().compareTo(m2.getAge()); //根据age进行正序排列: 测试结果
[name=esdfsd, age=133]
[name=dsdfsd, age=186]
[name=asdfsd, age=1335]
[name=fsdfsd, age=17721]
1.2 return m2.getAge().compareTo(m1.getAge()); //根据age进行倒序排列 :测试结果
[name=fsdfsd, age=17721]
[name=asdfsd, age=1335]
[name=dsdfsd, age=186]
[name=esdfsd, age=133]
1.3 return m1.getName().compareTo(m2.getName()); //根据name进行正序排列:测试结果
[name=asdfsd, age=1335]
[name=dsdfsd, age=186]
[name=esdfsd, age=133]
[name=fsdfsd, age=17721]
1.4 return m2.getName().compareTo(m1.getName()); //根据name进行倒序排列:测试结果
[name=fsdfsd, age=17721]
[name=esdfsd, age=133]
[name=dsdfsd, age=186]
[name=asdfsd, age=1335]