java中的数组与集合的排序---摘抄自:http://blog.csdn.net/jonathan_q_bo/archive/2005/11/29/539043.aspx
2007-07-04 10:07
721 查看
java中的数组与集合的排序
两种需要排序的对象:数组和集合
1、集合
java.util.Collections类提供了排序方法sort();
两种排序方式:
1)被排序对象实现java.lang.Comparable接口,在其中的compareTo()方法中确定排序规则
2)用java.util.Comparator的具体实例确定排序规则
2、数组
java.util.Arrays类提供了各种重载的排序方法sort();
如果对int[]等类型可直接升序排序
如果对Object[]类型排序,需要确定排序顺序,仍旧两种方式,被排序类本身实现Comparable接口或者提供java.util.Comparator类。
程序执行结果:
两种需要排序的对象:数组和集合
1、集合
java.util.Collections类提供了排序方法sort();
static void | sort(List list) Sorts the specified list into ascending order, according to the natural ordering of its elements. |
static void | sort(List list, Comparator c) Sorts the specified list according to the order induced by the specified comparator. |
1)被排序对象实现java.lang.Comparable接口,在其中的compareTo()方法中确定排序规则
2)用java.util.Comparator的具体实例确定排序规则
2、数组
java.util.Arrays类提供了各种重载的排序方法sort();
static void | )]sort(byte[] a) Sorts the specified array of bytes into ascending numerical order. |
static void | , int, int)]sort(byte[] a, int fromIndex, int toIndex) Sorts the specified range of the specified array of bytes into ascending numerical order. |
static void | )]sort(char[] a) Sorts the specified array of chars into ascending numerical order. |
static void | , int, int)]sort(char[] a, int fromIndex, int toIndex) Sorts the specified range of the specified array of chars into ascending numerical order. |
static void | )]sort(double[] a) Sorts the specified array of doubles into ascending numerical order. |
static void | , int, int)]sort(double[] a, int fromIndex, int toIndex) Sorts the specified range of the specified array of doubles into ascending numerical order. |
static void | )]sort(float[] a) Sorts the specified array of floats into ascending numerical order. |
static void | , int, int)]sort(float[] a, int fromIndex, int toIndex) Sorts the specified range of the specified array of floats into ascending numerical order. |
static void | )]sort(int[] a) Sorts the specified array of ints into ascending numerical order. |
static void | , int, int)]sort(int[] a, int fromIndex, int toIndex) Sorts the specified range of the specified array of ints into ascending numerical order. |
static void | )]sort(long[] a) Sorts the specified array of longs into ascending numerical order. |
static void | , int, int)]sort(long[] a, int fromIndex, int toIndex) Sorts the specified range of the specified array of longs into ascending numerical order. |
static void | )]sort(Object[] a) Sorts the specified array of objects into ascending order, according to the natural ordering of its elements. |
static void | , java.util.Comparator)]sort(Object[] a, Comparator c) Sorts the specified array of objects according to the order induced by the specified comparator. |
static void | , int, int)]sort(Object[] a, int fromIndex, int toIndex) Sorts the specified range of the specified array of objects into ascending order, according to the natural ordering of its elements. |
static void | , int, int, java.util.Comparator)]sort(Object[] a, int fromIndex, int toIndex, Comparator c) Sorts the specified range of the specified array of objects according to the order induced by the specified comparator. |
static void | )]sort(short[] a) Sorts the specified array of shorts into ascending numerical order. |
static void | , int, int)]sort(short[] a, int fromIndex, int toIndex) Sorts the specified range of the specified array of shorts into ascending numerical order. |
如果对Object[]类型排序,需要确定排序顺序,仍旧两种方式,被排序类本身实现Comparable接口或者提供java.util.Comparator类。
/* * Created on 2005-11-27 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package sort; import java.util.ArrayList; import java.util.Comparator; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; //import java.util.Random; import java.lang.Math; /** * @author Jonathan * * <b>排序方法汇总</b> * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class SortCollection{ private void sortByComparableOfList(){ ArrayList al = new ArrayList(); for(int i = 0; i < 10; i++){ int tmp = (int)(Math.random()*10); al.add(new SortedObjectOne(tmp,"List." + i)); } Collections.sort(al); Iterator itt = al.iterator(); while(itt.hasNext()) System.out.println(itt.next()); } private void sortByComparatorOfList(){ ArrayList al = new ArrayList(); for(int i = 0; i < 10; i++){ int tmp = (int)(Math.random()*10); al.add(new SortedObjectOne(tmp,"List." + i)); } Collections.sort(al, new SortOrderAsc()); Iterator itt = al.iterator(); while(itt.hasNext()) System.out.println(itt.next()); } /**整形数组的默认排序*/ private void sortByDefaultOfArray(){ int[] array = new int[10]; for(int i = 0; i < array.length; i++){ array[i] = (int)(Math.random()*10); } Arrays.sort(array); for(int i = 0; i < array.length; i++){ System.out.println("<Array" + i + ">:<" + array[i] + ">"); } } /**对象数组的默认排序*/ private void sortByComparableOfArray(){ SortedObjectOne[] array = new SortedObjectOne[10]; for(int i = 0; i < array.length; i++){ array[i] = new SortedObjectOne((int)(Math.random()*10), "Array" + i); } Arrays.sort(array); for(int i = 0; i < array.length; i++){ System.out.println(array[i]); } } /**对象数组的定制排序*/ private void sortByComparatorOfArray(){ SortedObjectOne[] array = new SortedObjectOne[10]; for(int i = 0; i < array.length; i++){ array[i] = new SortedObjectOne((int)(Math.random()*10), "Array" + i); } Arrays.sort(array, new SortOrderAsc()); for(int i = 0; i < array.length; i++){ System.out.println(array[i]); } } public static void main(String args[]){ SortCollection sc = new SortCollection(); System.out.println("-- sort list by comparable --"); sc.sortByComparableOfList(); System.out.println("-- sort list by comparator --"); sc.sortByComparatorOfList(); System.out.println("-- sort array by default --"); sc.sortByDefaultOfArray(); System.out.println("-- sort array by comparable --"); sc.sortByComparableOfArray(); System.out.println("-- sort array by comparator --"); sc.sortByComparatorOfArray(); } } /** 根据Comparable接口确定排序顺序 */ class SortedObjectOne implements Comparable{ public int attr1; public String attr2; public SortedObjectOne(int attr1,String attr2){ this.attr1 = attr1; this.attr2 = attr2; } /* (non-Javadoc) * @see java.lang.Comparable#compareTo(java.lang.Object) */ public int compareTo(Object arg0) { // TODO Auto-generated method stub if(arg0 instanceof SortedObjectOne){ SortedObjectOne obj = (SortedObjectOne)arg0; return this.attr1 - obj.attr1; } return 0; } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { // TODO Auto-generated method stub return "<" + this.attr2 + ">:<" + this.attr1 + ">"; } } /** 根据Comparator确定排序顺序 */ class SortOrderAsc implements Comparator{ /* (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ public int compare(Object arg0, Object arg1) { // TODO Auto-generated method stub if(arg0 instanceof SortedObjectOne && arg1 instanceof SortedObjectOne){ SortedObjectOne tmp0 = (SortedObjectOne)arg0; SortedObjectOne tmp1 = (SortedObjectOne)arg1; return tmp1.attr1 - tmp0.attr1; } return 0; } } |
-- sort list by comparable -- <List.3>:<0> <List.9>:<0> <List.0>:<1> <List.1>:<1> <List.4>:<1> <List.6>:<3> <List.8>:<3> <List.5>:<7> <List.2>:<8> <List.7>:<9> -- sort list by comparator -- <List.7>:<5> <List.1>:<4> <List.2>:<3> <List.8>:<3> <List.3>:<2> <List.5>:<2> <List.9>:<2> <List.0>:<0> <List.4>:<0> <List.6>:<0> -- sort array by default -- <Array0>:<1> <Array1>:<2> <Array2>:<2> <Array3>:<6> <Array4>:<7> <Array5>:<8> <Array6>:<8> <Array7>:<9> <Array8>:<9> <Array9>:<9> -- sort array by comparable -- <Array2>:<0> <Array1>:<1> <Array7>:<1> <Array9>:<3> <Array0>:<4> <Array8>:<4> <Array5>:<5> <Array6>:<5> <Array3>:<8> <Array4>:<9> -- sort array by comparator -- <Array3>:<9> <Array7>:<9> <Array1>:<7> <Array4>:<5> <Array5>:<3> <Array8>:<3> <Array0>:<2> <Array2>:<1> <Array6>:<1> <Array9>:<0> |
相关文章推荐
- java关键字Transient 转自:http://blog.csdn.net/flynetcn/archive/2008/03/03/2142020.aspx
- ASP.NET 常用技巧学习 (http://blog.csdn.net/JavaProgramers/archive/2007/04/13/1563441.aspx)
- Eclipse Java注释模板设置详解 http://blog.csdn.net/ahhsxy/archive/2009/09/11/4542682.aspx
- java NIO引用自http://blog.csdn.net/shidcai/archive/2006/03/19/629261.aspx
- ICTCLAS分词系统Java调用接口在Eclipse中的安装 http://blog.csdn.net/CloneIQ/archive/2006/07/20/945909.aspx
- Eclipse_jboss00(http://blog.csdn.net/javamxj/archive/2005/01/13/251982.aspx)
- 如何将Web应用打包成.war文件? 转自:http://blog.csdn.net/code_JAVA/archive/2008/05/19/2457749.aspx
- 在基于Struts构架的Java Web项目中加入ICTCLAS分词http://blog.csdn.net/CloneIQ/archive/2006/08/09/1043088.aspx
- java的内存泄露(转自:http://blog.csdn.net/elimago/archive/2007/12/18/1946380.aspx)
- java annotation---摘自http://blog.csdn.net/numenZQ/archive/2007/06/17/1654827.aspx
- Java字符编码 --摘自http://blog.csdn.net/numenZQ/archive/2007/06/17/1654827.aspx
- ant 介绍 http://blog.csdn.net/sunjavaduke/archive/2007/03/08/1523819.aspx
- JAVA中数据库操作的各种方式与设计模式的应用(http://blog.csdn.net/wangyihust/archive/2006/01/14/579613.aspx)
- Eclipse Rcp系列 http://www.blogjava.net/dreamstone/archive/2007/02/08/98706.html
- Windows内存管理 http://blog.csdn.net/zeroless/archive/2006/03/17/626849.aspx
- 开发MSN插件http://blog.csdn.net/Red_angelX/archive/2006/12/26/1462781.aspx
- CString 的方法(from:http://blog.csdn.net/lijuwen/archive/2006/03/13/623186.aspx)
- 在VMWare WorkStation上安装64位操作系统(转:http://blog.csdn.net/bill_lee_sh_cn/archive/2009/03/06/3963185.aspx)
- 手把手教你把Vim改装成一个IDE编程环境(图文)http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx
- 有空到这里看看有关语音处理的文章http://blog.csdn.net/xiufengy/archive/2006/03/24/636646.aspx