Java中的数组排序
Java中的数组排序,一般是利用Arrays.sort(),这个方法是经过优化的快速排序。在Arrays种有多中形式的重载,在这里就不一一列举了。
数组排序的种类:
1.非降序排序, 非升序排序(就排序后数组元素排列的结果而言)
2.基本类型数据的排序,类类型数据的排序(就排序的对象而言)
排序示例:
int型数组的非降序排序:
package sort;
import java.util.Arrays;
public class Main {
public static void displayArray(int[] array) {
for (int i: array) {
System.out.print(i + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr = new int[]{43, 84, 3, 8, 4, 7, 3, 75, 82, 748, 35};
System.out.println("排序前:");
displayArray(arr);
Arrays.sort(arr);
System.out.println("排序后:");
displayArray(arr);
}
}
运行结果如下:

int型数组的非升序排序:
package sort; import java.util.Arrays;
import java.util.Comparator; public class Main {
public static void displayArray(Integer[] array) {
for (int i: array) {
System.out.print(i + " ");
}
System.out.println();
} public static void main(String[] args) {
Integer[] arr = new Integer[]{43, 84, 3, 8, 4, 7, 3, 75, 82, 748, 35}; System.out.println("排序前:");
displayArray(arr); Arrays.sort(arr, new JX()); System.out.println("排序后:");
displayArray(arr);
}
} class JX implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 <= o2) {
return 1;
}
return -1;
}
}
运行结果如下:

类类型的非降序排序:
package sort;
import java.util.Arrays;
public class Main {
public static void displayArray(Student[] student) {
for (Student s : student) {
System.out.println(s);
}
}
public static void main(String[] args) {
Student[] s = new Student[5];
s[0] = new Student("wwww", 20, 2.34);
s[1] = new Student("kkkk", 2, 2.34);
s[2] = new Student("pppp", 25, 3.34);
s[3] = new Student("hhhh", 12, 4.34);
s[4] = new Student("jjjj", 10, 5.34);
System.out.println("排序前:");
displayArray(s);
Arrays.sort(s);
System.out.println("排序后:");
displayArray(s);
}
}
/*
* 根据年龄进行非降序排序
*/
class Student implements Comparable<Student> {
private String name;
private int age;
private double height;
public Student(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
@Override
public int compareTo(Student o) {
if (this.age <= o.age) {
return -1;
}
return 1;
}
public String toString() {
return "Name: " + name + " Age: " + age + " Height: " + height;
}
}
运行结果如下:

类类型的非升序排序:
package sort;
import java.util.Arrays;
public class Main {
public static void displayArray(Student[] student) {
for (Student s : student) {
System.out.println(s);
}
}
public static void main(String[] args) {
Student[] s = new Student[5];
s[0] = new Student("wwww", 20, 2.34);
s[1] = new Student("kkkk", 2, 2.34);
s[2] = new Student("pppp", 25, 3.34);
s[3] = new Student("hhhh", 12, 4.34);
s[4] = new Student("jjjj", 10, 5.34);
System.out.println("排序前:");
displayArray(s);
Arrays.sort(s);
System.out.println("排序后:");
displayArray(s);
}
}
/*
* 根据年龄进行非升序排序
*/
class Student implements Comparable<Student> {
private String name;
private int age;
private double height;
public Student(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
@Override
public int compareTo(Student o) {
if (this.age <= o.age) {
return 1;
}
return -1;
}
public String toString() {
return "Name: " + name + " Age: " + age + " Height: " + height;
}
}
运行结果如下:

根据指定属性对类类型数组排序:
package sort; import java.util.Arrays;
import java.util.Comparator; public class Main {
public static void displayArray(Student[] student) {
for (Student s : student) {
System.out.println(s);
}
} public static void main(String[] args) {
Student[] s = new Student[5];
s[0] = new Student("wwww", 20, 2.34);
s[1] = new Student("kkkk", 2, 2.34);
s[2] = new Student("pppp", 25, 3.34);
s[3] = new Student("hhhh", 12, 4.34);
s[4] = new Student("jjjj", 10, 5.34);
/*
System.out.println("排序前:");
displayArray(s);
*/
System.out.println("按age进行非降序排序");
Arrays.sort(s, new SortByAge());
displayArray(s); System.out.println("按height进行非升序排序");
Arrays.sort(s, new SortByHeight());
displayArray(s);
}
} class Student {
private String name;
private int age;
private double height; public Student(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
} public String toString() {
return "Name: " + name + " Age: " + age + " Height: " + height;
} public int getAge() {
return age;
} public double getHeight() {
return height;
}
} /*
* 按age进行非降序排序
*/
class SortByAge implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
if (o1.getAge() <= o2.getAge()) {
return -1;
}
return 1;
}
} /*
* 按height进行非升序排序
*/
class SortByHeight implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
if (o1.getHeight() - o2.getHeight() < 0.01) {
return 1;
}
return -1;
} }
运行结果如下:

Java中的数组排序的更多相关文章
- java中sort方法的自定义比较器写法(转载)
java中sort方法的自定义比较器写法 摘要 在做一些算法题时常常会需要对数组.自定义对象.集合进行排序. 在java中对数组排序提供了Arrays.sort()方法,对集合排序提供Collecti ...
- java中Comparator的用法 -- 实现集合和数组排序
在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类Step package com.l ...
- Java 中的数组操作
前言 在Java中,有很多封装好的类可以用来操纵数组(排序,复制等等),使得数组使用起来非常的方便.这就是高级语言带来的好处. 代码示例 - 一维数组 package test; import jav ...
- 数组在C++和java中的区别
几乎所有的程序设计语言都支持数组.在C和C++中使用数组是很危险的.因为C和C++中的数组就是内存块.如果一个程序要访问其自身内存块之外的数组,或者在数组初始化之前使用它,都会产生难以预料的后果. j ...
- 【JAVA零基础入门系列】Day10 Java中的数组
什么是数组?顾名思义,就是数据的组合,把一些相同类型的数放到一组里去. 那为什么要用数组呢?比如需要统计全班同学的成绩的时候,如果给班上50个同学的成绩信息都命名一个变量进行存储,显然不方便,而且在做 ...
- 【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
foreach语句使用总结 增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集合. part1定义了一个局部变量,这个局部变量的类型与part2中的对 ...
- Java中常见的比较器的实现方法
在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用& ...
- javascript中对两个对象进行排序 和 java中的两个对象排序
javascript中的对象数组排序 一 定义一个对象数组 var text = [{"name":"张","age":24},{" ...
- 【Java】Java中的Collections类——Java中升级版的数据结构【转】
一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数 ...
随机推荐
- android UI进阶之实现listview的下拉加载
关于listview的操作五花八门,有下拉刷新,分级显示,分页列表,逐页加载等,以后会陆续和大家分享这些技术,今天讲下下拉加载这个功能的实现. 最初的下拉加载应该是ios上的效果,现在很多应用如新浪微 ...
- iOS开发——常识swift篇&随机数获取
随机数获取 arc4random()这个全局函数会生成9位数的随机整数 1,下面是使用arc4random函数求一个1~100的随机数(包括1和100) var temp:Int = ...
- 利用nf_conntrack机制存储路由,省去每包路由查找
IP是无连接的,因此IP路由是每包一路由的,数据包通过查找路由表获取路由,这是现代操作协议协议栈IP路由的默认处理方式.可是假设协议栈具有流识别能力,是不是能够基于流来路由呢?答案无疑是肯定的. 设计 ...
- pt-table-checksum 与pt-table-sync
http://www.lai18.com/user/481193.html?id=481193&p=1 主从数据校验使用percona-toolkit工具集的以下两个工具(主库上使用): pt ...
- MS509Team----------------Cknife
http://www.ms509.com/ http://www.freebuf.com/sectool/98681.html 中国蚁剑
- unix fopen和fopen_s用法的比较
在定义FILE * fp 之后,fopen的用法是: fp = fopen(filename,"w").而对于fopen_s来说,还得定义另外一个变量errno_t err,然后e ...
- liunx 文件相关
一.linux中 文件属性以 l.b.c.d.开头的都是什么文件? lrwxrwxrwx 1 root root 11 Aug 20 08:38 core -> /proc/kcoredrwxr ...
- Linux 内核Coding Style整理
转载:http://www.cnblogs.com/wang_yb/p/3532349.html 总结linux内核开发的coding style, 便于以后写代码时参考. 下面只是罗列一些规则, 具 ...
- Android 高级UI设计笔记05:使用TextView实现跑马灯的效果
1. 使用TextView属性实现跑马灯的效果: (1). 新建一个Android工程,命名为"MarqueeTextViewDemo",如下: (2). 来到activity_m ...
- Node.js module.exports和exports的区别
require 用来加载代码,而 exports 和 module.exports 则用来导出代码,从接触node.js就不会它们两陌生,上代码: foo.js exports.a = functio ...