第九节 java数组的介绍,数组定义,数组排序,Arrays类静态方法使用,以及源码解析

/**
 * Created by Administrator on 2017/12/3.
 *  数组的基本操作
 */
public class base06 {
    public static void main(String[] args) {
        String [] a;//定义一个数组,但是还未初始化(分配内存)
        String [] b=new String[6];//定义一个指定大小的数组,数组下标从0开始
        //b[6]="a";//ArrayIndexOutOfBoundsException  数组越界

        String [] c={"1","2","4"};//定义并且初始化数组

        int [] intArray=new int[100];
        for (int i=0;i<100;i++){
            intArray[i]=i;
        }
        //根据数据的下标,向数组添加元素


        for (int i=0;i<intArray.length;i++){
            System.out.println(intArray[i]);
        }
        //循环输出数组,length为数组的属性,代表数组的长度


        //Arrays.copyOf 将数组拷贝带新数组中,第二个参数为拷贝的长度
        int [] copyArray= Arrays.copyOf(intArray,intArray.length);
        //此时将打印intArray数组中所有的数
        printArray(copyArray);

        /**
         * 此时只打印 0-4 这5个数,因为指定了拷贝长度
         *
         * 源码来看:新建了一个指定长度的数组,然后调用System.arraycopy进行拷贝
         * public static int[] copyOf(int[] original, int newLength) {
         *      int[] copy = new int[newLength];
         *       System.arraycopy(original, 0, copy, 0,
         *       Math.min(original.length, newLength));
         *      return copy;
         *   }
         */
        int [] copyArray1= Arrays.copyOf(intArray,5);
        printArray(copyArray1);


        /**
         * 定义一个int类型的数组,大小为100
         * 循环向数组中添加最大值为100的整数
         */
        int [] intArraySort=new int[10];
        Random rd=new Random();
        for (int i=0;i<10;i++){
            intArraySort[i]=rd.nextInt(100);
        }

        /**
         * 第一次打印为向数组中添加的数
         * 第二次打印为排序好数组
         *
         * 源码:调用Arrays的静态方法进行排序,排序算法为:快速排序,后续会讲解
         *     public static void sort(int[] a) {
         *      DualPivotQuicksort.sort(a);
         *      }
         */
        printArray(intArraySort);//60||68||36||79||39||75||54||59||86||70||
        Arrays.sort(intArraySort);
        printArray(intArraySort);//36||39||54||59||60||68||70||75||79||86||

        /**
         * [3, 8, 21, 29, 47, 54, 56, 81, 94, 96]
         * 返回一个这种形式的数组
         *如下源码可知,就是利用StringBuilder进行的循环拼接
             * public static String toString(int[] a) {
             *if (a == null)
             *return "null";
             *int iMax = a.length - 1;
             *if (iMax == -1)
             *return "[]";

             *StringBuilder b = new StringBuilder();
             *b.append('[');
             *for (int i = 0; ; i++) {
             *b.append(a[i]);
             *if (i == iMax)
             *return b.append(']').toString();
             *b.append(", ");
         *}
         *}
         */
        System.out.println(Arrays.toString(intArraySort));

        /**
         * Arrays.binarySearch 方法是针对有序数组进行二分法查找,如果找到则返回对应下标,否则返回负数
         * 查看源码发现:典型的二分法计算,先查找中间值,比较中间值和目标值的大小
         *
             * private static int binarySearch0(int[] a, int fromIndex, int toIndex,
         *    int key) {
         *    int low = fromIndex;
         *    int high = toIndex - 1;

         *    while (low <= high) {
         *    int mid = (low + high) >>> 1;
         *    int midVal = a[mid];

         *    if (midVal < key)
         *    low = mid + 1;
         *    else if (midVal > key)
         *   high = mid - 1;
         *   else
         *   return mid; // key found
         *   }
         *   return -(low + 1);  // key not found.
         *   }
         *
         */
        int [] aArray={10,7,1,2,4,9,8,10};
        System.out.println(Arrays.binarySearch(aArray,7));//结果:-6
        Arrays.sort(aArray);
        System.out.println(Arrays.binarySearch(aArray,7));//结果:3  返回下标


        /**
         * 判断两个数组是否相等
         * 查看源码发现如下:1.首先判断数组内存地址是否相等,如果相等,那么a和a2指向的为同一个数组,则相等
         * 2.如果其中一个数组为null,或者数组长度不相等,则不相等
         * 3.循环对比数组中的每一个值进行判断
             * public static boolean equals(int[] a, int[] a2) {
         *     if (a==a2)
         *     return true;
         *    if (a==null || a2==null)
         *    return false;

         *    int length = a.length;
         *     if (a2.length != length)
         *    return false;

         *    for (int i=0; i<length; i++)
         *   if (a[i] != a2[i])
         *    return false;

         *     return true;
         *    }
         */
        System.out.println(Arrays.equals(aArray,intArraySort));





    }

    /**
     *打印数组方法
     */
    public static void printArray(int [] args) {
        System.out.println();
        for (int i=0;i<args.length;i++){
            System.out.print(args[i]+"||");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java中的Arrays类提供了一个sort方法,可以用来对数组进行排序。该方法可以对任何类型的数组进行排序,包括基本数据类型和对象类型。 使用Arrays类的sort方法进行数组排序非常简单,只需要将要排序数组作为参数传递给sort方法即可。例如,对一个整型数组进行排序的代码如下: int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3}; Arrays.sort(arr); 在上面的代码中,我们定义了一个整型数组arr,并将其初始化为一个无序的数组。然后,我们调用Arrays类的sort方法对该数组进行排序排序后,数组arr中的元素将按照从小到大的顺序排列。 需要注意的是,Arrays类的sort方法会改变原始数组的顺序,因此在排序之前需要备份原始数组,以免数据丢失。此外,如果要对对象数组进行排序,需要保证对象实现了Comparable接口或者传递一个Comparator对象作为参数。 总之,Arrays类的sort方法Java中非常实用的一个方法,可以方便地对数组进行排序。 ### 回答2: Java是一种功能强大且广泛使用的编程语言,Arrays类是Java提供的一个工具类,其中sort方法是该类中最常用的方法之一 ,主要用于数组排序数组排序可以使数列按照一定规则进行排序,使其便于查找和使用Arrays类中的sort方法可以将数组按照从小到大或从大到小的顺序进行排序,以便于使用使用方法需要注意以下几点。 1. 参数形式 该方法有两个参数形式:sort(int[] array)和sort(Object[] array)。第一个参数形式适用于整型数组,且数组中的元素应全部为整型。第二个参数形式适用于任意类型的对象数组使用方法应根据实际情况选择适当的参数形式。 2. 排序顺序 sort方法默认按照升序(从小到大)的顺序排序数组。如果需要按降序(从大到小)排序,需要使用Arrays类中提供的另一个重载方法sort(int[] array, int fromIndex, int toIndex, Comparator<? super Integer> c),并指定Comparator对象的方法定义排序规则。 3. 排序性能 sort方法采用快速排序算法来进行排序,其时间复杂度为O(nlogn)。在排序大型数组时,该方法的效率较高,但在排序小型数组时,容易出现效率问题。因此,在对小型数组进行排序时,可使用Arrays类中提供的另一个重载方法sort(int[] a, int fromIndex, int toIndex),该方法采用插入排序算法来进行排序,其时间复杂度为O(n^2),但在小型数组中的效率更高。 以上三点是Java数组Arrays类sort方法数组排序时需要注意的问题。在使用sort方法时,还需要根据实际情况灵活使用,以实现最佳的排序效果。 ### 回答3: java数组是一种能够存储一组具有相同数据类型的元素的结构。在实际开发中,我们经常需要对数组进行排序操作,以实现更高效的数据处理。java提供了一种极其方便的数组排序方式,通过调用arrays类的sort方法,可以对数组进行快速排序arrays类是java.util包中的一个类,主要提供了一系列与数组相关的操作方法。其中sort方法可以对数组进行排序,具体使用方法如下: ```java public static void sort(int[] a) //排序一个数组 public static void sort(int[] a, int fromIndex, int toIndex) //对一个数组的一部分进行排序 ``` 其中,第一个方法的参数是一个一维数组,该方法将会对整个数组进行排序;第二个方法的参数是一个一维数组、一个起始索引和一个结束索引。通过指定数组的起始和结束索引,可以仅对数组中的一部分元素进行排序。 在使用sort方法时,需要注意的是,排序前需要保证数组已经存储了需要排序的数据。如果数组中存在null元素,sort方法将会抛出NullPointerException异常。如果元素不是可比较类型,例如数组中存储了自定义的对象类型,sort方法将会抛出ClassCastException异常。 sort方法使用快速排序算法实现,具有较好的时间复杂度和空间复杂度。在实际开发中,常用的数组排序方式包括冒泡排序、插入排序、快速排序、归并排序等,每种排序方式都有不同的使用场景和优缺点。在使用sort方法时,需要根据实际情况选择合适的排序方式。 总之,arrays类的sort方法提供了一种便捷的数组排序方式,可以大大提升java的数据处理效率。在实际应用中,我们可以根据需求和数据规模等因素,选择合适的排序方式,以实现更高效的数据处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值