JavaSe数组详解

一、数组的概念:

1.什么是数组?数组是很多个相同类型的数据,按照一定的顺序排列起来,使用一个名字命名,并且通过对这些数据进行编号来做到对他们的管理和操作

2.数组的一些概念:数组名、数组类型、数组下标(数组索引)、数组长度(数组个数)、数组元素

3.数组的特点:  (1)数组是引用数据类型,数组元素可以是引用数据类型,也可以是基本数据类型 

    (2).数组长度一旦确定了,就不可再改变 (3)创建数组会在内存中开辟一块连续的空间 (4)数组有序

4.数组的分类:(1)数组元素可以分为基本类型元素的数组和引用类型元素的数组

    (2)根据数组的维度,可以分为一维数组和多维数组

二、一维数组的使用:

1.数组的定义:(3种写法)

第一种:数据类型[] 数组名 = new 数据类型[数组长度];

第二种:数据类型[] 数组名 = new 数据类型[]{数组元素1,数组元素2,....,数组元素n};

第三种:数据类型[] 数组名 = {数组元素1,数组元素2,.....,数组元素n}; (模糊)

例子:

int[] array1 = new int[5];//方式一
int[] array2 = new int[]{1,2,3,4,5};//方式二
int[] array3 = {1,2,3,4,5};//方式三

//静态初始化:数组的初始化和赋值同时进行

//动态初始化:数组的初始化和赋值分开进行

2.数组元素的使用(引用)

数组元素通过数组下标来调用。

注意 : 数组的下标是从0开始的,到数组的长度-1结束

例子:

public class ArrayTest{
    public void static main(String[] args){
        int[] array1 = new int[]{1,2,3,4};//方式二
        //讲数组下标为3的元素改为0
        array[3] = 0;
        System.out.println(arr[3]); 
    }
}

3.数组的属性长度length

length表示数组的长度,可以通过数组.length调用

特殊的:数组长度一旦确定,就不能再更改了

例子:

public class ArrayTest{
    public void static main(String[] args){
        int[] array1 = new int[]{1,2,3,4};//方式二
        //输出此数组的长度
        System.out.println(array1.length); 
    }
}

4.一维数组的遍历

public class ArrayTest{
    public void static main(String[] args){
        int[] array1 = new int[]{1,2,3,4};//方式二
        //一维数组的遍历
        for(int i = 0;i < array1.length;i++){
            System.out.println(array1[i]);
        } 
    }
}

5.一维数组的默认初始化值

数组元素是整形:0。

数组元素是浮点型:0.0。

数组元素是char型,0或'\u0000'   (特殊的)

数组元素是boolean型:false

数组元素是引用数据类型:null

6.一维数组的内存解析

例子

int[] array1;
array1 = new int[5];
array1[1]=3;

String[] array2 = new String[]{"张华","李四","黑马","张思"};

JavaSe数组详解_第1张图片

 三、二维数组的使用:

1.二维数组的理解:一个数组中嵌套数组

2.二维数组的定义

int[][] arr = new int[3][4];//第一种定义方式
int[][] arr = new int[3][];//第二种定义方式
int[][] arr = {{1,2},{3,4,5},{7,8,9}};//第三种定义方式

3.调用二位数组的元素

System.out.println(arr[0][1]);
System.out.println(arr[1][1]);

4.二维数组的长度属性

int[] arr[] = new int[][]{{1,2,3},{4,5,6,9},{7,8,9}};
System.out.println(arr.length); //为3
System.out.println(arr[1].length);//为3
System.out.println(arr[2].length);//为4

5.遍历二维数组

int[] arr[] = new int[][]{{1,2,3},{4,5,6,9},{7,8,9}};
for(int i = 0;i < arr.length;i++){
    for(int j = 0; j < arr[i].length;j++){
        System.out.println(arr[i][j] + " ");
    }
        System.out.println();
}

6.二维数组的默认初始化值

二维数组分为外层数组的元素和内层数组的元素

初始化方式一
 

int[][] arr = new int[1][2]

外层元素的初始值:地址值

内层元素的初始化值:看数据元素的类型,和一维数组的初始化情况类似

初始化方式二

int[][] arr = new int[2][];  //此写法错误

外层元素的初始化值为:null
内层元素的初始化值为:不可以调用否则会报错

7.二维数组的内存解析

例子

int[][] a1 = new int[3][4]{{1,2,3,4},{1,2,3,4},{1,2,3,4}};

JavaSe数组详解_第2张图片

四、数组中常用的算法

1.针对数值型数组

求数组元素中中最大值、最小值、平均值、总和

2.数组的赋值和复制

比如有两个数组:array1 和 array2

数组的赋值:array2 = array1;

就是将array1保存的数组地址赋给了array2,他们共同指向堆空间中的同一个数组

数组的复制:

array2 = new int[array1.length];
for(int i = 0;i < array2.length;i++){
    array2[i] = array1[i];
}

就是在堆空间中给array2开辟了新的数组空间,把array1数组的元素挨个赋值给array2数组中

3.数组的反转

for(int i = 0; i < arr.length / 2;i++){
    String temp = arr[i];
    arr[i] = arr[arr.length - i -1];
    arr[arr.length - i -1] =temp;
}  //方式一

for(int i = 0,j = arr.length - i - 1;j--,i++){
    String temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

4.数组中指定元素的查找

线性查找:遍历,一个个数据进行比较

二分查找:每次比较中间值,折半的方式检索(前提是数组必须是有序的)

5.数组的排序算法(见数据结构)

五、Arrays工具类

它是定义在java.util包下的,提供了许多操作数组的方式。

1.boolean equals(int[] a,int b):判断两个数组是否相等

2.String toString(int[] a):输出数组的信息

3.void fill(int[] a,int val):将指定的值填充到数组中

4.void sort(int[] a):对数组进行排序

5.int binarySearch(int[] a,int key)

int binarySearch(int[] a,int key)
int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
int index = Arrays.binarySearch(arr3, 210);
    if(index >= 0){
	    System.out.println(index);
	}else{
		System.out.println("未找到");
	}

六、数组常见的异常

1.空指针异常:NullPointerException

2.数组角标越界:ArrayIndexOutOfBoundsException

你可能感兴趣的:(java)