`

Java集合对象排序测试

    博客分类:
  • 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));    
}  
 

 

 

 

分享到:
评论

相关推荐

    Java开发技术大全(500个源代码).

    SortDemo.java 排序示例 travelTwoDime.java 遍历二维数组 traversing.java 遍历一维数组 useStrBuf.java 使用StringBuffer示例 useString.java 使用String示例 YanghuiTri.java 构造和显示杨辉三角 第6章 ...

    java面试题及技巧4

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    廖雪峰 Java 教程.doc

    Java集合简介 使用List 编写equals方法 使用Map 编写equals和hashCode 使用EnumMap 使用TreeMap 使用Properties 使用Set 使用Queue 使用PriorityQueue 使用Deque 使用Stack 使用Iterator 使用...

    java开源包11

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包4

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java 编程入门思考

    A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...

    Java初学者入门教学

    A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...

    java常用工具类的使用

    在Java开发类库中,提供了很多工具类,我们即将学习最常见的工具类,比如对日期的操作,对集合的操作等。具体更多的工具类,请参考JavaDoc文档。 2. java.util.Date类 Date类包装了毫秒值,毫秒值表示自1970年1月1...

    java联想(中文)

    A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...

    AIC的Java课程1-6章

    第11章 集合 4课时  理解什么是集合以及Java的集合框架。  辨析List,Set和Map接口。 • 理解List接口,辨别使用List接口的实现类。 • 理解Set接口,辨别使用Set接口的实现类。...

    java初学者必看

    最近正在学习Java,也买了很多的有关Java方面的书籍,其中发现《跟我学Java》这本书,都的很不错啊,所以顺便拿电脑把这本书的目录敲了下来,与大家分享。尤其是那些和我一样初学Java的朋友们,看看哪一节对你有用,...

    java面试题目与技巧1

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    JAVA_Thinking in Java

    A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...

    JAVA基础课程讲义

    JAVA.IO包相关流对象用法总结(尚学堂1002班王鑫) 165 IO中其他常用类 165 File类 165 RandomAccessFile 166 思考作业 166 上机作业 166 提高课外作业 166 第九章 多线程技术 167 基本概念 167 程序 167 进程 167 ...

    Thinking in Java简体中文(全)

    A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...

    java面试题以及技巧

    │ 164个完整Java代码.zip │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+...

    Thinking in Java 中文第四版+习题答案

    A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 其他J/Direct...

    习----题-Java-Web程序设计教程-[共2页].pdf

    (2)在测试类中生成多个学生类的对象,放入 TreeSet 中,要求按照 3 门课总成绩从高到低 排序,总成绩相等按学号排序。输出排序结果。 注意实现 Comparator 接口的 compare(Object obj1,Object obj2)函数。 4.以 ...

Global site tag (gtag.js) - Google Analytics