java集合对象排序

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 接口排序
    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));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值