谈java数组(2)

一.数组的应用

1.1保存数据

我们创建的数组可以用来储存数据(数据在堆上放着),等需要时我们在从中取出来。

代码示例:

import java.util.Arrays;

public class Test {

    public static void main(String[] args) {
       int []array1={25,63,89};
        System.out.println(Arrays.toString(array1));
       }
    }


运行结果:

1.2作为实参传递给函数

代码示例:

import java.util.Arrays;

public class Test {
public static void main(String[] args) {
    int [] array1= {25,69,87};
        func(array1);
}
public static void func(int[]arr){
    arr[1]=89;
    System.out.println(Arrays.toString(arr));
}
    }


调试过程: 

运行结果: 

原因分析: 

1.3作为函数的返回值 

 代码示例:

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int []result=get();
        System.out.println(Arrays.toString(result));
    }
    public static int[]get(){
        int[]arr={1,5,8};
        return arr;
    }
}

调试过程:

运行结果:

二.在数组方面java内置工具方法

2.1比较数组内容(一维数组)

2.1.1基本类型数组的比较

使用Arrays.equals( )方法进行比较

代码示例1(两数组内容相同):

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int []array1={1,5,9,8,7};
        int []array2={1,5,9,8,7};
        boolean isEqual=Arrays.equals(array1,array2);
    }

}

调试过程:

代码示例2(两数组内容不同):

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int []array1={1,5,9,8,7};
        int []array2={1,5,9,8};
        boolean isEqual=Arrays.equals(array1,array2);
    }

}

调试过程:

2.1.2对象数组的比较

代码示例1(数组内容不相同):

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        String []array1={"数组","内容"};
        String []array2={"内容","数组"};
        boolean isEqual=Arrays.equals(array1,array2);
    }

}

调试过程:

代码示例1(数组内容相同):

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        String []array1={"A","B"};
        String []array2={"A","B"};
        boolean isEqual=Arrays.equals(array1,array2);
    }

}

调试过程:

2.2比较多维数组内容

代码示例:

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int [][]array1={{2,6},{6,8}};
        int [][]array2={{2,9},{8,4}};
        boolean isEqual=Arrays.deepEquals(array1,array2);
    }

}

调试过程:

2.3数组排序 

2.3.1快速排序数组

使用Arrays.sort( )对数组原地排序

对Arrays.sort( )的正确使用:

调试过程:

 运行结果:

 2.3.2冒泡排序

代码示例:

public class Test {
    public static void main(String[] args) {
        int[] array = {58,59,95,32,56};
        bubbleSort(array);
    }
    public static void bubbleSort(int []arr){
        for (int i = 0; i < arr.length-1 ; i++) {
            for (int j = 0; j < arr.length-1-i ; j++) {
                if(arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
    }
}

调试过程: 

 2.3.3数组逆序:

要给两个下标分别指向第一个元素和最后一个元素,当符合循环条件时将两元素互换位置,然后让前一个下标自增,后一个下标自减,知道不符合循环条件为止。

代码示例:

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[] array = {58, 59, 95, 32, 56};
        reverse(array);
        System.out.println(Arrays.toString(array));
    }
    public static void reverse(int []arr){
        int left=0;
        int right= arr.length-1;
        while(left<right){
            int temp=arr[left];
            arr[left]=arr[right];
            arr[right]=temp;
            left++;
            right--;
        }
    }
}

调试过程: 

运行结果: 

 2.4数组拷贝

快速拷贝数组:

2.4.1使用Arrays.copyOf(array,array.length)进行拷贝。其中array是源数组array.length是源数组的长度(拷贝整个数组)

代码示例1:

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[]array={2,5,9,6,3};
        int []newarray=Arrays.copyOf(array,array.length);
        System.out.println(Arrays.toString(newarray));

    }
}

 调试过程:

运行结果:

2.使用System.arraycopy(src,srcPos,des,desPos,length)进行拷贝。其中src为源数组srcPos为源数组起始位置(索引)des为目标数组desPos为目标数组起始位置(索引)length为要复制的元素个数

代码示例2:

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[]array={2,5,9,6,3};
        int [] newarray=new int[3]; //目标数组需要提前创建
        System.arraycopy(array,2,newarray,0,3);
        System.out.println(Arrays.toString(newarray));
    }
}

调试过程:

运行结果:

3.使用Arrays.copyOfRange(src,from,to )进行拷贝。其中src为源数组from为起始索引(包含),to为结束索引(不包含)

代码示例3:

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[]array={2,5,9,6,3};
        int []newarray=Arrays.copyOfRange(array,1,3);
        System.out.println(Arrays.toString(newarray));
    }
}

 调试过程:

运行结果:

2.5查找数组中指定的元素 

 2.5.1顺序查找

在for循环遍历数组过程中,找到与指定的元素相匹配的array[i],返回其下标值i,如果没有找到,返回数组里没有的下标值,一般返回-1,作为没有找到的标志。

代码示例:

public class Test {
    public static void main(String[] args) {
        int[] array = {1, 5, 9, 7, 3};
        System.out.println(find(array, 3));
    }

    private static int find(int[] array, int date) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == date) {
                return i;
            }
        }
        return -1;
    }
}

调试过程:运行结果:

 

缺点:需要逐个去找,直到找到与指定元素相匹配的array[i]为止,将其下标值返回,打印。

2.5.2.1二分查找(针对有序数组)

有序数组:即升序数组,降序数组

例如:int []array={1,2,3,4,5};有序数组

int []array={5,4,3,2,1};降序数组

代码示例:

public class Test {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        System.out.println(binarySearch(array, 8));
    }

    private static int binarySearch(int[] arr, int toFind) {
        int left = 0;
        int right = arr.length - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (toFind < arr[mid]) {
                right = mid - 1;
            } else if (toFind > arr[mid]) {
                left = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }
}

调试过程:

运行结果:

2.5.2.2调用库方法Arrays.binarySearch()进行二分查找快速排序

代码示例:

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[] array = {1,2,3, 4, 5, 6, 7, 8, 9};
        System.out.println(Arrays.binarySearch(array,8));
    }

}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值