1 、 Java API 针对集合类型排序提供了两种支持:
java.util.Collections.sort(java.util.List)
java.util.Collections.sort(java.util.List, java.util.Comparator)
第一个方法要求所排序的元素类必须实现 java.lang.Comparable 接口。第二个方法要求实现一个 java.util.Comparator 接口。 java.lang.Comparable 接口和 java.util.Comparator 接口是 Java 对排序最提供最基本支持。这两个接口不但可以用于集合元素排序,还可以用于数组排序。如果数组或集合元素是 String 类型,则可以利用 Java API 实现的 Comparator<String> 对象 String.CASE_INSENSITIVE_ORDER 为容器元素排序。
2 、例子一:实现 Comparable 接口排序
3 、例子二:实现 Comparator 接口排序
Java 如何通过所实现接口的方法进行排序是 API 内部的事情, Java 这样处理排序目的就是对容器元素排序有一个统一的方式,以简化编程。
3 、 HashMap 按照键值 Key 排序
java.util.Collections.sort(java.util.List)
java.util.Collections.sort(java.util.List, java.util.Comparator)
第一个方法要求所排序的元素类必须实现 java.lang.Comparable 接口。第二个方法要求实现一个 java.util.Comparator 接口。 java.lang.Comparable 接口和 java.util.Comparator 接口是 Java 对排序最提供最基本支持。这两个接口不但可以用于集合元素排序,还可以用于数组排序。如果数组或集合元素是 String 类型,则可以利用 Java API 实现的 Comparator<String> 对象 String.CASE_INSENSITIVE_ORDER 为容器元素排序。
2 、例子一:实现 Comparable 接口排序
public class Cat implements Comparable<Cat>{
private int age;
private String name;
public int compareTo(Cat o) {
return this.getAge() - o.getAge();
}
}
List<Cat> listCat = new ArrayList<Cat>();
Cat cat1 = new Cat(34, "hehe"); listCat.add(cat1);
Cat cat2 = new Cat(12, "haha"); listCat.add(cat2);
Cat cat3 = new Cat(23, "leizhimin"); listCat.add(cat3);
Cat cat4 = new Cat(13, "lavasoft"); listCat.add(cat4);
Collections.sort(listCat); //排序
Collections.sort(listCat, Collections.reverseOrder()); //逆序
Collections.reverse(listCat); //再次逆序
String[] strArray = new String[] {"z", "a", "C"};
List<String> list = Arrays.asList(strArray); //数组转换为列表
String[] strArrayNew1 = list.toArray(strArray); //列表转换为数组
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
3 、例子二:实现 Comparator 接口排序
public class Person {
private int age;
private String name;
}
. -----------------------------------------------------------------------------
//通过Comparator接口实现个性化排序测试
public class PersonComparator implements Comparator<Person> {
/**排序接口算法实现*/
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
List<Person> listPerson = new ArrayList<Person>();
Person person1 = new Person(34, "lavasoft"); listPerson.add(person1);
Person person2 = new Person(12, "lavasoft"); listPerson.add(person1);
Person person3 = new Person(23, "leizhimin"); listPerson.add(person1);
Person person4 = new Person(13, "sdg"); listPerson.add(person1);
Comparator<Person> ascComparator = new PersonComparator();
Collections.sort(listPerson, ascComparator);
Java 如何通过所实现接口的方法进行排序是 API 内部的事情, Java 这样处理排序目的就是对容器元素排序有一个统一的方式,以简化编程。
3 、 HashMap 按照键值 Key 排序
Map map = new HashMap();
mp.put("4", "a");
mp.put("2", "b");
mp.put("1", "c");
mp.put("3", "d");
-----------------------------------------------------------------------------
方法一:
Oject[] key = map.keySet().toArray();
Arays.sort(key);
-----------------------------------------------------------------------------
方法二:
Lst arrayList = new ArrayList(map.entrySet());
Cllections.sort(arrayList, new Comparator(){
public int compare(Object arg1, Object arg2) {
Map.Entry obj1 = (Map.Entry) arg1;
Map.Entry obj2 = (Map.Entry) arg2;
return (obj1.getKey()).toString().compareTo(obj2.getKey());
}
});
//将HASHMAP中的数据排序
for (Iterator iter = arrayList.iterator(); iter.hasNext();) {
Map.Entry entry = (Map.Entry)iter.next();
String key = (String)entry.getKey();
System.out.println(map.get(key));
}