java中排序函数sort()使用,Arrays.sort()和Collections.sort()
Java中常用的数组或集合排序的方法有两个,一个是java.util.Arrays中的静态方法Arrays.sort(),还有一个是java.util.Collections中的静态方法的Collections.sort()方法,下面分别介绍两种用法。
一.java.util.Arrays中的静态方法Arrays.sort()
Arrays中的sort()方法主要是针对各种数据类型(基本数据类型和引用对象类型)的数组元素排序。

.......

关于引用对象类型数组的排序sort()方法要用到接口Comparator<T>,对其排序内部的比较函数compare()进行重写,以便于我们按照我们的排序要求对引用对象数组极性排序,默认是升序排序,但可以自己自定义成降序排序。关于Comparator<T>的介绍见官方文档
sortpublic static <T> void sort(T[] a,
sortpublic static <T> void sort(T[] a,
|
下面上实例:
package test;
import java.util.Arrays;
import java.util.Comparator;
//用Arrays中的sort()对数组进行排序
public class test4 {
//年龄比较器
Comparator<student> comparatorAge =new Comparator <student>(){
public int compare(student p1,student p2){
if (p1.getAge()>p2.getAge())
return 1;
else if (p1.getAge()<p2.getAge())
return -1;
else
return 0;
}
}; //成绩比较器
Comparator<student> comparatorGrade =new Comparator <student>(){
public int compare(student p1,student p2){
if (p1.getGrade()>p2.getGrade())
return 1;
else if (p1.getGrade()<p2.getGrade())
return -1;
else
return 0;
}
}; public student [] ageSort(student[] s){
Arrays.sort(s,comparatorAge);
return s;
} public student [] gradeSort(student[] s){
Arrays.sort(s,comparatorGrade);
return s;
} public static void main(String[] args) {
test4 tt=new test4();
student p1 = new student() ;
p1.setAge( 10 );
p1.setName( "p1" );
p1.setGrade( 98 ); student p2 = new student() ;
p2.setAge( 30 );
p2.setName( "p2" );
p2.setGrade( 70 ); student p3 = new student() ;
p3.setAge( 20 );
p3.setName( "p3" );
p3.setGrade( 83 ); student p4 = new student() ;
p4.setAge( 15 );
p4.setName( "p4" );
p4.setGrade( 80 ); student [] list = {p1,p2,p3,p4} ; student []agePrint= tt.ageSort(list);
for (student ss : agePrint) {
System.out.println("student age sort ," + ss.getName() + " " + ss.getAge() +" " +ss.getGrade());
}//按年龄排序 student []gradePrint= tt.gradeSort(list);
for (student ss : gradePrint) {
System.out.println("student grade sort ," + ss.getName() + " " + ss.getAge() +" " +ss.getGrade());
}//按成绩排序 } } //创建一个类型,用于比较的引用对象类型
class student{
private String name;
private int age;
private float grade; public void setName(String name){
this.name=name;
} public void setAge(int age) {
this.age = age;
} public void setGrade(float grade) {
this.grade = grade;
} public String getName() {
return name;
} public int getAge() {
return age;
} public float getGrade() {
return grade;
}
}
结果如下:
student age sort ,p1 10 98.0
student age sort ,p4 15 80.0
student age sort ,p3 20 83.0
student age sort ,p2 30 70.0
student grade sort ,p2 30 70.0
student grade sort ,p4 15 80.0
student grade sort ,p3 20 83.0
student grade sort ,p1 10 98.0
二. java.util.Collections中的静态方法的Collections.sort()
java.util.Collections中的静态方法的Collection.sort()主要是针对集合框架中的动态数组,链表,树,哈希表等( ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap )进行排序。
关于Comporator 的介绍和上面相同,主要是针对里面compare()的重写
下面上实例:
package test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
//用Collections的sort()方法对集合进行排序。
/*
* 题目:
* 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
* 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
*/ public class test3 { public String PrintMinNumber(Integer [] s) {
if(s==null) return null;
String s1="";
ArrayList<Integer> list=new ArrayList<Integer>(Arrays.asList(s));
// for(int i=0;i<s.length;i++){
// list.add(s[i]);
// }
Collections.sort(list,new Comparator<Integer>(){//数组里的数两两组合比较,按照比较值更得的顺序升序排序
public int compare(Integer str1,Integer str2){
String s1=str1+""+str2;
String s2=str2+""+str1;
return s1.compareTo(s2);//变成-s1.compareTo(s2)就是降序排序了
}
});
for(int j:list){
System.out.println("输出为:"+j);
s1+=j;
}
return s1;
} public static void main(String[] args) { Integer [] list={3,32,321};
test3 demo=new test3();
System.out.println(demo.PrintMinNumber(list));
} }
结果如下:
输出为:321
输出为:32
输出为:3
321323
最后,上面的两个实例只要改变相应的待排序数据的形式(数组,集合),都可以替换使用。
java中排序函数sort()使用,Arrays.sort()和Collections.sort()的更多相关文章
- java基础 -- Collections.sort的两种用法
/** * @author * @version * 类说明 */ package com.jabberchina.test; import java.util.ArrayList; import j ...
- java基础—— Collections.sort的两种用法
package com.jabberchina.test; import java.util.ArrayList; import java.util.Collections; import java. ...
- Collections.sort的三种用法
/** * @author guwh * @version 创建时间:2011-11-3 上午10:49:36 * 类说明 */ package com.jabberchina.test; impor ...
- Collections.sort的两种用法 转
/** * @author guwh * @version 创建时间:2011-11-3 上午10:49:36 * 类说明 */ package com.jabberchina.test; impor ...
- sort()排序 collections.sort();
1.main方法: public class Test { public static void main(String[] args) { /** * * sort()方法详解 * 1.Collec ...
- Java的数组和list升序,降序,逆序函数Collections.sort和Arrays.sort的使用
list升序,降序,逆序List<Integer>list =new ArrayList<Integer>();//如果list是 5 7 2 6 8 1 41.升序:Coll ...
- [Java] java.util.Arrays 中使用的 sort 采用的算法 (转)
http://book.douban.com/annotation/15154366/Q: java.util.Arrays 中使用的 sort 采用的是什么算法? A: java中Arrays. ...
- 5.4 集合的排序(Java学习笔记)(Collections.sort(),及Arrays.sort()底层分析)
1.Comparable接口 这个接口顾名思义就是用于排序的,如果要对某些对象进行排序,那么该对象所在的类必须实现 Comparabld接口.Comparable接口只有一个方法CompareTo() ...
- Java中Arrays.sort()和Collections.sort()
1.简单示例 sort方法的使用非常的简单明了,下面的例子中,先定义一个比较Dog大小的Comparator,然后将其实例对象作为参数传给sort方法,通过此示例,你应该能够快速掌握Arrays.so ...
随机推荐
- Solr的搭建
Solr6.6.0下载地址 http://www.apache.org/dyn/closer.lua/lucene/solr/ 安装JRE 需要Java Runtime Environment(JRE ...
- SpringMVC参考
史上最简单的 Spring MVC http://blog.csdn.net/column/details/14594.html
- js保留小数点后面几位的方法
原文地址: http://www.jb51.net/article/45884.htm 四舍五入以下处理结果会四舍五入: ? 1 2 var num =2.446242342; num = num.t ...
- Python+Selenium学习--打印当前页面的title及url
场景 测试中,访问1个页面然后判断其title是否符合预期是很常见的1个用例,所谓用例不够,title来凑就是这个道理.更具体一点,假设1个页面的title应该是'hello world', 那么可以 ...
- PHP文件上传与下载
一:上传文件与报错 $_FILES 超全局数组,包含了有关上传文件的所有信息! 而且,这个数组中只包含文件相关信息,其他数据依然在$_POST里面$_FILES是一个二维数组,每上传一个文件,都是数组 ...
- React 入门实例教程【转】
Any day will do. 哪一天都行 Are you kidding? 你在开玩笑吧! Congratulations! 祝贺你! I don’t mean it. 我不是故意的. 原文作者: ...
- ScrollView定时器复用
起始偏移量设置为一个宽度 [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(refreshPic) us ...
- js学习(初)
一种弱数据类型语言 var 基础: 处理字符串的函数 数组基础操作 流程控制语句 选择,分支 循环for for in for(索引变量 in 对象){ 语句块 } 面向对象: js语言的对象就是 ...
- eval详解
eval()的作用 把字符串参数解析成js代码并运行,并返回执行的结果: eval的作用域 作用域在它所有的范围内容有效 IE8及以下指向window 解决方法: functiona(){ if(wi ...
- 修复python命令行下接收不到参数的问题
由于之前安装过多个python版本,导致出现了在命令行下直接给py文件传递参数的时候接收不到,即使重新卸载安装也没有解决. 解决办法: 修改如下图路径下的键值为:"D:\Python27\p ...