第三章:数组

2021320

11:26

数组的特点:

 * 数组是有序排列的

 * 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型

 * 创建数组对象会在内存中开辟一整块连续的空间

 * 数组的长度一旦确定,就不能修改

 

数组是引用类型,引用类型的初始化要用new

 

//      一维数组的声明和初始化

        int[] ids;//声明

//      数组是引用类型,引用类型的初始化要用new

        //1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行

        ids = new int[]{1001,1002,1003,1004};

        //1.2 动态初始化:数组的初始化和数组元素的赋值操作分开进行

        String[] names = new String[5];

        

//      总结:数组一旦初始化完成,其长度就确定了。

数组元素的默认初始化值

*      > 数组元素是整型: 0

*      > 数组元素是浮点型: 0.0

*      > 数组元素是char型: 0或'\u0000' 0代表的ASCII符号,而不是'0'

*      > 数组元素是boolean型: false(因为boolean的底层中false是用0存储的,true是用1存储的)

*

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

 

.length length属性获取数组的长度

 

静态赋值不可以不输入值,末尾最多有一个",",如果有多个","会报错,编译失败。末尾的这个","不会多算长度,只会算作最后一个元素的结尾

 

引用计数算法是一种判断“堆”中的数据是不是垃圾的方法

 

 

 

 

        二维数组的声明和初始化

        //静态初始化

        int[][] arr1 = new int[][]  {{1,2,3},{4,5},{6,7,8}};

        //动态初始化

        String[][] arr2 = new String[3][2];

        //动态初始化2

        String[][] arr3 = new String[3][];

int[] arr4 = {1,2,3,4,5};//省略的写法,类型推断

int arr5;

arr5 = {1,2,3,4,5};//错误的写法,分两行写不支持类型推断

 

int[][] arr6 = new int[][]{{1,2,3},{4,5},{6,7,8}};

int[] arr6[] = new int[][]{{1,2,3},{4,5},{6,7,8}};

int arr6[][] = new int[][]{{1,2,3},{4,5},{6,7,8}};

[]放在哪里都可以

 

数组元素的默认初始化值

*  针对于初始化方式一:比如: int[][] arr = new  int[4][3];

*      外层元素的初始化值为:地址值

*      外层元素的初始化值为:与一维数组初始化情况相同

*  针对于初始化方式二:比如:int[][] arr = new  int[4][];

*      外层元素的初始化值为:null

*      外层元素的初始化值为:不能调用,否则报错

 

int[] x,y[];  效果等于:

int[] x;

int[] y[];

x是一个一维的数组,元素类型是int;

y是一个二维数组,元素类型是int;

 

求数组最大值、最小值的题中,

//      最大值和最小值不要初始化为0,因为如果数组是包含负数的话,0并不是最大的或最小的

//      并且max和min要在给数组赋完值之后初始化,要不然arr[0]默认还是0

 

        int[] array1, array2;

        array1 = new int[] { 2, 3, 5, 7, 11, 13,  17, 19 };

        array2 = array1;

        // array1和array2的地址值相同,都指向了堆空间中的同一个数组实体。这个不能称作数组的复制。

 

冒牌排序要会,快速排序要会。冒泡排序比较简单,快速排序用的最多,所以两个都要会

堆排序和归并排序要知道是怎么实现的,面试可能会问

 

快排时间复杂度:0(nlogn)

冒泡时间复杂度:0(n^2)

 

java.util.Arrays 操作数组的工具类的常用方法

// 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) 对排序后的数组进行二分法检索指定的值。返回的值>=0代表找到了,返回负数是没找到。需要对返回的值做一个判断

 

引用数据类型的值,要么是地址值,要么是null

 

结尾

 

使用 Microsoft OneNote 2016 创建。 版权所有:古木苏