首页 > 代码库 > java 数组操作

java 数组操作

数组是一种数据结构,用来存储同一类型值的集合。

数组作为对象允许使用new关键字进行内存分配,在使用数组之前,必须首先定义数组变量所属的类型。

数组通过一个整型下标可以访问数组中得每一个值,例如,如果存在数组a。则a[i]就是数组中下标为i的整数(下标从0开始)。

1.数组的声明及初始化

 1      //声明
 2         int [] iArr ;
 3         String sArr [];
 4         
 5         //声明并分配大小
 6         int [] iArr2 = new int[3]; //数组内默认值为0
 7         String [] sArr2 = new String[10];//数组默认值为null
 8         System.out.println(Arrays.toString(iArr2));//打印数组  
 9         System.out.println(Arrays.toString(sArr2));
10         /*输出
11          * [0, 0, 0]
12            [null, null, null, null, null, null, null, null, null, null]
13          */
14         
15         //声明并赋值
16         int [] iArr3 =  new int[]{2,3,4,6};
17         String [] sArr3 = {"ONE","TWO","THREE"};
18         System.out.println(Arrays.toString(iArr3));//[2, 3, 4, 6]
19         System.out.println(Arrays.toString(sArr3));//[ONE, TWO, THREE]
20         
21         //简单使用
22         iArr = new int[]{1,2,3};
23         sArr = new String[2];
24         sArr[0] = "hello";
25         sArr[1] = "friend";
26         System.out.println(iArr[1]);//2
27         System.out.println(Arrays.toString(sArr));//[hello, friend]

2.数组的操作

(1)数组的遍历

    //数组的遍历
        int[] arr = {2,4,5,9,7}; 
        for(int i = 0; i < arr.length; i++){
            System.out.print(arr[i]+"\t");//2    4    5    9    7
        }
        System.out.println();
        for(int num : arr){
            System.out.print(num+"\t");//2    4    5    9    7
        }

(2)数组的填充

Arrays.fill()方法能够对数组进行填充,fill()方法有很多重载的方法,能够满足任意数组元素的填充或者替换。

     int[] arr = new int[5];
        //填充
        Arrays.fill(arr, 6);
        System.out.println(Arrays.toString(arr));//[6, 6, 6, 6, 6]
        
        //替换
        Arrays.fill(arr,2,4,0);
        System.out.println(Arrays.toString(arr));//[6, 6, 0, 0, 6]

(3)数组的排序

Arrays.sort()方法能够对数组进行排序

     int[] arr = {5, 4, 3, 2, 1};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));//[1, 2, 3, 4, 5]

(4)数组的复制

Arrays类中copyOf()方法和copyOfRange()方法可以实现对数组的复制,

前者是复制数组到指定长度,后者是将指定长度的数组复制到一个新的数组中(或者覆盖之前的数组)。

coypOf(arr, int newLength) 可用于数组的扩容

-arr: 要进行复制的数组

-newLength: 复制后数组的长度,如果新数组复制的长度大于arr,则用0或者null补充。如果新数组小于arr的长度,则复制arr的0为开始直至满足数组的长度。

int[] arr = new int[]{3,4,5};
arr = Arrays.copyOf(arr, arr.length*2);
System.out.println(Arrays.toString(arr));//[3, 4, 5, 0, 0, 0]

int[] newArr = Arrays.copyOf(arr, 2);
System.out.println(Arrays.toString(newArr));//[3, 4]

copyOfRange(arr, int fromIndex, int toIndex)

-arr: 要复制的数组

-fromIndex:指定要复制数组的开始索引位置,不能大于arr的长度

-toIndex:指定要复制数组的最后索引位置(不包括toIndex) 可以大于arr的长度

   int[] arr = {5, 7, 8, 2, 9};
    arr = Arrays.copyOfRange(arr, 0, arr.length*2);
    System.out.println(Arrays.toString(arr));//[5, 7, 8, 2, 9, 0, 0, 0, 0, 0]

    int[] newArr = Arrays.copyOfRange(arr, 1, 3);
    System.out.println(Arrays.toString(newArr));//[7, 8]

在System类中的arraycopy方法将数组的元素copy到另一个数组中,方法为:

System.arraycopy(src, srcPos, dest, destPos, length)

-src: 要复制的数组

-srcPos:将要复制的数组的索引位置

-dest: 目标数组

-destPos:目标数组的索引位置

-length:要复制的长度,从索引位置开始计数

int[] arr = {6, 4, 11, 12};
int [] newArr = new int[]{5,4,9,3,4,2};
System.arraycopy(arr, 2, newArr, 0, 2);
System.out.println(Arrays.toString(newArr));
//[11, 12, 9, 3, 4, 2]

 3.数组的排序

(1) 冒泡排序

冒泡的基本思路是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面。

        //冒泡排序
        int[] arr = new int[]{12, 3, 65, 45, 88, 1, 7};
   
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; } } } System.out.println(Arrays.toString(arr));//[1, 3, 7, 12, 45, 65, 88]

(2)直接选择排序

直接选择排序的思路是将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素,找出最大数后与“最后”一个元素交换。

        //直接选择排序
        int[] arr = new int[]{12, 3, 65, 45, 88, 1, 7};
        int index;
        for(int i = 1; i < arr.length; i++){
            index =0;
            //找出最大值
            for(int j = 0; j <= arr.length - i; j++){
                if(arr[j] > arr[index]){
                    index = j;
                }
            }
            //最大值放到最后的位置上
            int temp = arr[index];
            arr[index] = arr[arr.length - i];
            arr[arr.length - i] = temp;

        }
        System.out.println(Arrays.toString(arr));//[1, 3, 7, 12, 45, 65, 88]

(3)反转排序

将数组的元素反转替换,即将元素的最后一个元素与第一个元素进行交换,倒数第二个元素与数组的第二个元素进行交换。。。。

        //翻转排序 -将数组的位置反过来
        int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7};
        int arrLength = arr.length;
        for(int i = 0; i < arrLength/2 ; i++ ){
            int temp = arr[i];
            arr[i] = arr[arrLength-1-i];
            arr[arrLength-1-i] = temp;
        }
        System.out.println(Arrays.toString(arr));//[7, 6, 5, 4, 3, 2, 1]

 

java 数组操作