【学习笔记】数组

数组

数组的定义

  • 数组是相同类型数据的有序集合

  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成

  • 其中,每一个数据称作一个数组元素,每个数组可以通过一个下标来访问他们。

 

数组的声明创建

1.声明一个数组

int[] num;     //首选方法
int num[];     //可以达到同样的效果,但不是首选,了解即可

第一种方法是 java建议在类型后加中括号,代表数组,

而第二种方法是c/c++语言风格,是早些年为了使c/c++程序员尽快掌握java而使用的方法

2.创建一个数组

num = new int[10] 

一定要分配一个初始的大小,否则它创建的时候就不知道要存多少

数组元素是通过索引访问的,数组索引从0开始 : 给它赋值 num[0] = 1; num[1] = 2;

获取数组的长度: num.length


内存分析

image-20220715154716286

 

1.声明一个数组,会先压入栈中

image-20220715154949643

2.创建数组,在堆中开辟了内存

image-20220715155210239

3.给数组中赋值

image-20220715155255061

如果去取数组中不存在的元素,比如num[10],就会报错 java.lang.ArrayIndexOutOfBoundsException:10 (下标数组越界)


数组初始化

数组有三种初始化方式

1.静态初始化

int[] nums = {1,2,3};
Man[] mans = {new Man(),new Man()};

2.动态初始化

int[] nums = new int[10];
nums[0] = 1;
nums[1] = 2;

3.默认初始化

数组是引用类型,他的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

也就是,在声明并且创建了数组后,并未给其赋值,那么它的每个元素的值都是默认值

int[] nums = new int[10];
//num[0]~num[9] 的值都是0

 

 

小结:

  • 数组是相同数据类型(数组类型可以为任意类型)的有序集合

  • 数组也是对象,数组元素相当于对象的成员变量

  • 数组长度是确定的、不可变的。如果月结,则报:ArrayIndexOutOfBounds

 

 


数组的使用

数组反转

package com.wzt.array;
​
public class arrayDemo01 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};
//        int[] reArrays = reverse(arrays);
//        for (int i = 0; i < reArrays.length; i++) {
//            System.out.println(reArrays[i]);
//        }
        System.out.println("=============================");
        int[] reArrays2 = reverse2(arrays);
        for (int i = 0; i < reArrays2.length; i++) {
            System.out.println(reArrays2[i]);
        }
    }
//    public static int[] reverse(int[] array){
//        int t = 0;
//        int numberMax = array.length-1;
//        for (int i = 0; i < array.length/2; i++) {
//            t = array[i];
//            array[i] = array[numberMax];
//            array[numberMax] = t;
//            numberMax--;
//        }
//        return array;
//    }
    public static int[] reverse2(int[] arrays){
        int[] resultArray =  new int[arrays.length];
        for (int i = 0, j = resultArray.length-1 ;i < arrays.length; i++,j--) {
            resultArray[j] = arrays[i];
        }
        return resultArray;
    }
}
​

 


多维数组

多维数组可以看成是数组的数组,,比如二维数组就是一特殊的一维数组,其中每一个元素都是一个一维数组。

二维数组

int a[][] = new int[3][2]

以上二维数组a可以看成是一个三行两列的数组

image-20220715171817352

二维数组的操作

package com.wzt.array;
​
public class arrayDemo02 {
    public static void main(String[] args) {
        int[][] a = {{2,3},{5,6},{8,9}};
​
        /*[3][2]
             2,3    a[0]
             5,6    a[1]
             8,9    a[2]
        */
​
        //打印数组中的元素
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.println(a[i][j]);
            }
        }
    }
}
​

Array工具类

1.给数组赋值 fill方法

package com.wzt.array;
​
import java.util.Arrays;
​
public class arrayDemo03 {
    public static void main(String[] args) {
        int[] a = {15,89,47,3,99,5689,21,789,5};
​
        //fill
        Arrays.fill(a,2);
        System.out.println(Arrays.toString(a));
    }
}
​

image-20220715175000975

 

2.给数组排序 sort方法

package com.wzt.array;
​
import java.util.Arrays;
​
public class arrayDemo03 {
    public static void main(String[] args) {
        int[] a = {15,89,47,3,99,5689,21,789,5};
​
       Arrays.sort(a);
        System.out.println(Arrays.toString(a));
    }
}
​

image-20220715175127697

 

3.比较数组 equals方法

package com.wzt.array;
​
import java.util.Arrays;
​
public class arrayDemo03 {
    public static void main(String[] args) {
        int[] a = {15,89,47,3,99,5689,21,789,5};
        int[] b = {15,89,47,3,99,5689,21,789,5};
        int[] c = {15,89,47,3,99,5689,21,789,566666};
        boolean flag = Arrays.equals(a,b);
        boolean flag1 = Arrays.equals(a,c);
        System.out.println("a与b元素值是否相等:"+flag);
        System.out.println("a与c元素值是否相等:"+flag1);
    }
}
​

image-20220715175524789

 

4.查找数组元素 binarySearch方法 对排序好的数组进行二分查找法操作

使用二叉搜索算法搜索指定的int数组的指定值。 在进行此调用之前,必须对数组进行排序(如sort(int[\])方法)。 如果没有排序,结果是未定义的。 如果数组包含具有指定值的多个元素,则不能保证将找到哪个元素。

  • 参数

    a - 要搜索的数组

    key - 要搜索的值

  • 结果

    搜索键的索引,如果它包含在数组中; 否则, (-(*insertion point*) - 1) 。 如果阵列中的所有元素都小于指定键的第一元件比所述键时,或a.length的索引: 插入点被定义为将键插入到阵列的点。 请注意,这确保当且仅当找到该键时返回值将为> = 0。

package com.wzt.array;
​
import java.util.Arrays;
​
public class arrayDemo03 {
    public static void main(String[] args) {
        int[] a = {15,89,47,3,99,5689,21,789,5};
        //排序好的数组
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        int index = Arrays.binarySearch(a,99);
        System.out.println("该元素在"+ index +"号位置");
    }
}
​

image-20220715180126051

 
posted @ 2022-07-15 18:03  GrowthRoad  阅读(30)  评论(0编辑  收藏  举报