Java集合对象排序测试

1Java 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、付费专栏及课程。

余额充值