Java Arrays类进行数组排序

  排序算法,基本的高级语言都有一些提供。C语言有qsort()函数,C++有sort()函数,java语言有Arrays类(不是Array)。用这些排序时,都可以写自己的排序规则。

  Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法。

1.对基本数据类型的数组的排序

   说明:(1)Arrays类中的sort()使用的是“经过调优的快速排序法”;

      (2)比如int[],double[],char[]等基数据类型的数组,Arrays类之只是提供了默认的升序排列,没有提供相应的降序排列方法。

      (3)要对基础类型的数组进行降序排序,需要将这些数组转化为对应的封装类数组,如Integer[],Double[],Character[]等,对这些类数组进行排序。(其实还不如先进行升序排序,自己在转为将序)。

    用默认的升序对数组排序

   函数原型:static void sort(int[] a)   对指定的 int 型数组按数字升序进行排序。

       static void sort(int[] a, int fromIndex, int toIndex)  对指定 int 型数组的指定范围按数字升序进行排序。 

  代码实例:

import java.util.Arrays;
public class ArraysSort_11 {
    public static void main(String args[])
    {
        int[] a={1,4,-1,5,0};
        Arrays.sort(a);
        //数组a[]的内容变为{-1,0,1,4,5}
        for(int i=0;i<a.length;i++)
            System.out.print(a[i]+"  ");
    }
}

2.对复合数据类型的数据的排序

   函数原型:  (1)public static<T> void sort(T[] a,Comparator c)  根据指定比较器产生的顺序对指定对象数组进行排序。

        (2)public static<T> void sort(T[] a,int fromIndex,int toIndex,Comparator c)  根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。 

  说明:这个两个排序算法是“经过调优的合并排序”算法。

  代码实例:

package aa;

import java.util.Arrays;
import java.util.Comparator;

public class Arraysort {
    Point[] arr;

    Arraysort(){
        arr=new Point[4];    //定义对象数组arr,并分配存储的空间
        for(int i=0;i<4;i++)
            arr[i]=new Point();
    }

    public static void main(String[] args) {

        Arraysort sort=new Arraysort();
        sort.arr[0].x=2;sort.arr[0].y=1;    //初始化,对象数组中的数据
        sort.arr[1].x=2;sort.arr[1].y=2;
        sort.arr[2].x=1;sort.arr[2].y=2;
        sort.arr[3].x=0;sort.arr[3].y=1;

        Arrays.sort(sort.arr, new MyComprator());    //使用指定的排序器,进行排序
        for(int i=0;i<4;i++)    //输出排序结果
            System.out.println("("+sort.arr[i].x+","+sort.arr[i].y+")");
    }
}

class Point{
    int x;
    int y;
}

//比较器,x坐标从小到大排序;x相同时,按照y从小到大排序
class MyComprator implements Comparator {
    public int compare(Object arg0, Object arg1) {
        Point t1=(Point)arg0;
        Point t2=(Point)arg1;
        if(t1.x != t2.x)
            return t1.x>t2.x? 1:-1;
        else
            return t1.y>t2.y? 1:-1;
    }
}

  执行输出:

 

 

时间: 2024-08-03 08:32:57

Java Arrays类进行数组排序的相关文章

java Arrays类详解及实例代码_java

最近做项目 用到Arrays 类,这里整理下,希望大家能够掌握Arrays . 1.Arrays类概述   针对数组进行操作的工具类.   提供了排序,查找等功能. 2.成员方法   public static String toString(int[] a)   public static void sort(int[] a)   public static int binarySearch(int[] a,int value) package com; import java.util.Ar

Arrays类应用&amp;#183;使用Arrays类操作Java中的数组

使用 Arrays 类操作 Java 中的数组 Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序.搜索等(关于类和方法的相关内容在后面的章节中会详细讲解滴~~). Arrays 中常用的方法: 1. 排序 语法:  Arrays.sort(数组名); 可以使用 sort( ) 方法实现对数组的排序,只要将数组名放在 sort( ) 方法的括号中,就可以完成对该数组的排序(按升序排列),如: 运行结果: 

java数组 代码优化 我能想到的就是下面的代码(未考虑Arrays类)

问题描述 java数组 代码优化 我能想到的就是下面的代码(未考虑Arrays类) // 定义一个函数,接收一个数组与一个要查找的元素,如果该元素存在数组中,那么返回该元素在数组中的索引值,如果不存在返回-1.(不要严格要求使用二分查找法) import java.util.Scanner; class demo2 { public static void main(String[] args){ int[] index=lookfornum(); for (int i=0;i<index.le

java自定义类的数组的二分查找时,应该实现什么接口?

问题描述 java自定义类的数组的二分查找时,应该实现什么接口? 我在做POJ 1054时,希望对自己定义的一个类Plant进行二分查找,但是查找的结果一直不成功(未找到).我认为是没有实现判断类相等的接口中对应的方法,请问诸位该怎么实现,或者还是别的原因,烦请各位不吝赐教,谢谢! 以下是源代码,出问题的地方在searchPath方法中"当下一步在稻田内时,查找下一步的坐标是否在Plant[]中",既: if(Arrays.binarySearch(plants tmp) != -1)

java中有类的子类一说,那有对象的子对象一说吗?

问题描述 java中有类的子类一说,那有对象的子对象一说吗? java中有类的子类一说,那有对象的子对象一说吗?新手提问莫见笑. 解决方案 类的子类专业点说叫继承,对象的子对象你可以理解成方法的重写或重载等. 解决方案二: 那是不是类中有内部类就可以呢?

漫谈Java实例化类

  Java 中实例化类的动作,你是否还是一成不变 new 对应对象呢?     经手的项目多了,代码编写量自然会增加,渐渐的会对设计模式产生感觉.     怎样使书写出来的类实例化动作,高内聚,低耦合,又兼具一定的扩展能力呢?     本文试图从几段鲜活的代码入手,给大家呈现不一样的 Java 实例化类.     下面代码取自 com.google.zxing 源码实现: public BitMatrix encode(String contents, BarcodeFormat format

创建java只读类

完全可以创建自己的只读类,下面是个简单的例子:   //: Immutable1.java // Objects that cannot be modified // are immune to aliasing. public class Immutable1 { private int data; public Immutable1(int initVal) { data = initVal; } public int read() { return data; } public boole

对Java嵌套类的讨论

摘要:与字段和方法类似,Java允许类是其它类的成员.在这里,我们将嵌套类分为4种--嵌套顶级类(nested top-level classes),成员内部类(instance inner classes),本地内部类(local inner classes)和匿名内部类(anonymous inner classes). 在教授Java时,我经常发现学生尝试在方法中声明其它的方法.不过,与Pascal语言不同--Pascal允许嵌套声明过程procedures(与方法类似),而Java是不允

在Java中用类装载框架控制类加载

摘要 通过构建一个能够把Java类装载隔离到一个指定的jar文件中的类装载组件容器框架,你可以确保运行时刻会装载你期望的组件版本. Java的类装载框架强有力且具有灵活性.它允许应用程序存取类库而不必链接到静态的"include"文件.代之的是,它能够从指定位置装载包含库类和资源的档案文件,例如由CLASSPATH环境变量所定义的目录和网络位置.由系统来动态地解析对类和资源的运行时刻参考,从而简化了更新和版本发行.然而,每一个库都有其自己的依赖性集合-并且由开发者和发布人员来保证他们的