我们经常需要对列表或者数组进行排序,如果每次都自己写算法实现是很麻烦的,也是没必要的,Java本身自带了一个排序方法,可以对指定的列表或数组进行排序,而我们所要做的就是,编写排序规则.
实现
比较接口(排序规则)
java.util.Comparator<T>
int |
compare
(T
o1, T
o2) |
|
Compares its two arguments for order. |
例如下面的类和排序规则:
package test.Java;
import java.util.Comparator;
/**
* Member 类
* @author Ren.xia
*
*/
class Member {
int nID = 0;
int nAge = 0;
public Member(int nID, int nAge) {
// TODO Auto-generated constructor stub
this.nID = nID;
this.nAge = nAge;
}
}
/**
* 对Member排序的规则类
* 对ID上升排序
* @author Ren.xia
*
*/
class SortByID implements Comparator<Member> {
//排序
public int compare(Member o1, Member o2) {
return (o1.nID - o2.nID);
}
}
/**
* 对Member排序的规则类
* 对Age上升排序
* @author Ren.xia
*
*/
class SortByAge implements Comparator<Member> {
//排序
public int compare(Member o1, Member o2) {
return (o1.nAge - o2.nAge);
}
}
对列表进行排序
java.lang.Object
java.util.Collections
static <T extends Comparable
<? super T>> void |
sort
(List
<T> list)
根据指定比较器产生的顺序对指定对象数组进行排序。
|
static <T> void |
sort
(List
<T> list, Comparator
<? super T> c)
根据指定比较器产生的顺序对指定对象数组进行排序。
|
package test.Java;
import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
public class JavaTest {
public static void main(String[] args) {
List<Member> memberList = new ArrayList<Member>();
memberList.add(new Member(0, 23));
memberList.add(new Member(1, 27));
memberList.add(new Member(2, 24));
memberList.add(new Member(3, 22));
//对列表 进行年龄升序排序并输出
java.util.Collections.sort(memberList, new SortByAge());
for (int i = 0; i < memberList.size(); i++) {
System.out.printf("No.%d : (ID:%d, Age:%d)\n", i, memberList.get(i).nID, memberList.get(i).nAge);
}
//对列表 进行ID升序排序并输出
java.util.Collections.sort(memberList, new SortByID());
for (int i = 0; i < memberList.size(); i++) {
System.out.printf("No.%d : (ID:%d, Age:%d)\n", i, memberList.get(i).nID, memberList.get(i).nAge);
}
}//end of func
}
输出结果:
No.0 : (ID:3, Age:22)
No.1 : (ID:0, Age:23)
No.2 : (ID:2, Age:24)
No.3 : (ID:1, Age:27)
No.0 : (ID:0, Age:23)
No.1 : (ID:1, Age:27)
No.2 : (ID:2, Age:24)
No.3 : (ID:3, Age:22)
对数组进行排序
java.lang.Object
java.util.Arrays
static void |
sort
(T[] a)
根据指定比较器产生的顺序对指定对象数组进行排序
|
static <T> void |
sort
(T[]a, Comparator
<? super T> c)
根据指定比较器产生的顺序对指定对象数组进行排序
|
package test.Java;
import java.util.Comparator;
public class JavaTest {
public static void main(String[] args) {
Member[] members = {new Member(0, 29),
new Member(1, 23),
new Member(2, 22),
new Member(3, 25)};
//对数组 进行 年龄排序 输出
java.util.Arrays.sort(members, new SortByAge());
for (int i = 0; i < members.length; i++) {
System.out.printf("No.%d : (ID:%d, Age:%d)\n", i, members[i].nID, members[i].nAge);
}
//对数组 进行 ID排序 输出
java.util.Arrays.sort(members, new SortByID());
for (int i = 0; i < members.length; i++) {
System.out.printf("No.%d : (ID:%d, Age:%d)\n", i, members[i].nID, members[i].nAge);
}
}//end of func
}
输出结果 :
No.0 : (ID:2, Age:22)
No.1 : (ID:1, Age:23)
No.2 : (ID:3, Age:25)
No.3 : (ID:0, Age:29)
No.0 : (ID:0, Age:29)
No.1 : (ID:1, Age:23)
No.2 : (ID:2, Age:22)
No.3 : (ID:3, Age:25)
对于上面两个不论是列表排序还是数组排序都有一个方法sort(T[] a) 或 sort(List<T> list)
单参数都没有指定排序规则,因此这两个方法都必须使用另一个接口实现,否则会出现异常
java.lang.Comparable<T>
这一套接口必须要在排序的类中实现
/**
* Member 类
* @author Ren.xia
*
*/
class Member implements Comparable<Member> {
int nID = 0;
int nAge = 0;
public Member(int nID, int nAge) {
// TODO Auto-generated constructor stub
this.nID = nID;
this.nAge = nAge;
}
public int compareTo(Member other) {
return (this.nID - other.nID);
}
}
排序时就可以这样使用
java.util.Arrays.sort(members);
//或
java.util.Collections.sort(memberList);
其结果是相同的,但是个人感觉不太灵活
分享到:
相关推荐
主要介绍了C#实现对二维数组排序的方法,实例分析了C#数组遍历与排序的相关技巧,需要的朋友可以参考下
java数组排序的思想,过程和代码实现。多种数组排序的方法,主要有冒泡排序,堆排序,插入排序, 归并操作(merge), 归并操作(merge),选择排序,希尔排序。
任意数组排序 很经典经典 学习交流
VC多线程实现数组排序VC多线程实现数组排序VC多线程实现数组排序VC多线程实现数组排序VC多线程实现数组排序
找了好多地方没有找到,自己写一个汇编语言实现的数组排序。
不要看分数高,这个程序绝对可以对得起大家的分数。这个楼主的研究哈!反正下了评价后分数可以返还的................
最快的排序算法 千万级亿级数组排序最快的实现方法,排序算法数据结构
c#实现对泛型数组排序
asp数组 排序,实现一维数组排序,二维数组排序
c#实现数组排序,包括冒泡排序法、插入排序法、选择排序法、希尔排序法、快速排序法
使用快速排序法对一维数组进行排序,程序完全可以运行,方便大家学习
该文档涵盖了数组排序的基本概念,包括如何实现各种排序算法,如冒泡排序、选择排序、插入排序、归并排序和快速排序。此外,文档还为每个排序算法提供了详细的代码示例和实现细节。 该文档还涵盖了高级主题,如如何...
JAVA\数组排序,JAVA语言实现随机数的输入以及数组的排序。JAVA 随机数 数组排序
js实现json数组排序。 可对指定的字段进行排序,简单实用
java数组排序经典之一,选择法,效率很高的一种排序方法,内部实现二分搜索法。
应用c++库函数 qsort实现二维数组排序,即 举例:排序前:{{1,1,0} {3,0,2}, {1,1,1}, {1,2,0}} 排序后:{{1,1,0}, {1,1,1}, {1,2,0}, {3,0,2}}
java中数组的自定义排序,种类繁多,简单实现,可自由操控。
算法(冒泡,选择,插入,数组排序) package Teacher; import java.io.*; import java.util.Scanner; public class Tset { public static void main(String args[]) throws IOException { // 需要排序的数组,...
用冒泡排序法实现输入数组的排序,正序逆序都可以实现。