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中的数组排序的更多相关文章

  1. java中sort方法的自定义比较器写法(转载)

    java中sort方法的自定义比较器写法 摘要 在做一些算法题时常常会需要对数组.自定义对象.集合进行排序. 在java中对数组排序提供了Arrays.sort()方法,对集合排序提供Collecti ...

  2. java中Comparator的用法 -- 实现集合和数组排序

    在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类Step package com.l ...

  3. Java 中的数组操作

    前言 在Java中,有很多封装好的类可以用来操纵数组(排序,复制等等),使得数组使用起来非常的方便.这就是高级语言带来的好处. 代码示例 - 一维数组 package test; import jav ...

  4. 数组在C++和java中的区别

    几乎所有的程序设计语言都支持数组.在C和C++中使用数组是很危险的.因为C和C++中的数组就是内存块.如果一个程序要访问其自身内存块之外的数组,或者在数组初始化之前使用它,都会产生难以预料的后果. j ...

  5. 【JAVA零基础入门系列】Day10 Java中的数组

    什么是数组?顾名思义,就是数据的组合,把一些相同类型的数放到一组里去. 那为什么要用数组呢?比如需要统计全班同学的成绩的时候,如果给班上50个同学的成绩信息都命名一个变量进行存储,显然不方便,而且在做 ...

  6. 【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题

    foreach语句使用总结 增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集合. part1定义了一个局部变量,这个局部变量的类型与part2中的对 ...

  7. Java中常见的比较器的实现方法

    在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用& ...

  8. javascript中对两个对象进行排序 和 java中的两个对象排序

    javascript中的对象数组排序 一 定义一个对象数组 var text = [{"name":"张","age":24},{" ...

  9. 【Java】Java中的Collections类——Java中升级版的数据结构【转】

    一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数 ...

随机推荐

  1. delphi 数组类型

    数组类型 数组类型定义了一组指定类型的元素序列,在方括号中填入下标值就可访问数组中的元素.定义数组时,方括号也用来指定可能的下标值.例如,下面的代码中定义了一个有 24 个整数的数组:type     ...

  2. Linux rsync 同步实践

    目录[-] 1. rsync 同步的大致思路 2. rsync的安装 3. rsync的配置 4. rsync的基本操作 服务器端启动 注2. 实时同步 注3. rsync通过linux防火墙 公司网 ...

  3. android143 360 短信电话拦截

    package com.itheima.mobileguard.services; import java.lang.reflect.Method; import android.app.Servic ...

  4. 一个坐标点围绕任意中心点旋转--C#实现

    假设对图片上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转RotaryAngle角度后的新的坐标设为(x', y'),有公式: x'= (x - rx0)*cos(RotaryAngle) ...

  5. php中常用设置

    设置SESSION的生命周期 今天我所要想解决的问题,简单来说,就是设置SESSION的生命周期问题,其实问题是很简单了,只是不知道为什么,我用session_cache_expire(12*60); ...

  6. JMeter 学习笔记从不懂慢慢提升(01)

    开源已经成为一个趋势,虽然说做测试是一个低端的行业,但是我们也应该在这个低端的行业慢慢提升自己,让自己到达理想的高度. 以前说如果你会使用loadrunner可能别人就会觉得你有一定的水平那么就会拿高 ...

  7. C#开发---利用特性自定义数据导出到Excel

    网上C#导出Excel的方法有很多.但用来用去感觉不够自动化.于是花了点时间,利用特性做了个比较通用的导出方法.只需要根据实体类,自动导出想要的数据  1.在NuGet上安装Aspose.Cells或 ...

  8. Android(java)学习笔记96:如何改变spinner系统自带的字体和颜色

    1.首先我们要知道spinner系统自带字体和颜色本质: 原生的Spring 控件是无法更改字体和颜色的... 从下面的代码可以看出...红色的标注显示使用的是Android默认的布局.. Spinn ...

  9. Advanced Installer

    Advanced Installer是一款功能强大.可生成符合 MS Windows 认证的 Windows Installer 的 MSI 安装包制作工具,具有友好的图形用户界面,直观而且非常简单的 ...

  10. [改善Java代码]对字符串排序 持一种宽容的心态

    在Java中一涉及到中文处理就会冒出很多的问题来,其中的排序也是一个让人头疼的问题,看代码: import java.util.Arrays; public class Client { public ...