目录
5.1 数组的概念
一个具有固定大小,可以容纳相同类型数据的集合.
数组元素的类型:可以是基本类型,也可以是引用类型
数组可以认为是Java中最简单的复合类型。
数组的声明和使用,在语法上与C语言类似,但是在内部实现机制上有本质的区别。
5.2 数组声明
两种方式:强烈建议采用第一种方式
int[] nums; 或
int nums[];
5.3 数组创建与初始化
5.3.1 使用new创建数组
int[] nums; //声明数组,并没有创建数组,没有开辟堆内存。
nums = new int[5]; //创建数组,必须设置长度 开辟堆内存
new:用于分配内存的特殊运算符。通过new分配的数组,其元素会被自动初始化为0(对于数值类型)、false(对于boolean类型)或null(对于引用类型)。
说明:获得一个数据需要两个步骤,第一步是声明,第二步是创建数组对象。
一个数组就是一个对象。数组是动态创建的,所有对象都是动态创建的。
5.3.2 创建数组的三种方式
int[] nums = new int[5]; //初始化为默认值
int[] nums = {1,2,3,4,5}; //初始化为{}中指定的值,静态初始化
int[] nums = new int[] {1,2,3,4,5};//初始化为{}中指定的值,静态初始化
5.3.3 创建数组需要注意的问题
1、创建数组时必须知道数组的长度,否则new不知道要开辟多大的内存
2、第二种方式创建数组,必须在声明数组的同时创建数组
3、创建数组之后,数组的长度不能再改变。
说明:
数组的初始化分为静态初始化和动态初始化,静态初始化在初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度。
5.4 数组操作
1、通过下标访问数组元素
为指定的数组元素赋值、使用数组元素。如果数组下标越界,会抛出异常。
2、通过循环处理数组(打印输出所有数组元素)
数组与循环是分不开的
3、可以使用length属性获取数组的长度,从而可以避免数组越界。
示例5.1
创建数组、静态初始化、遍历输出数组元素
示例5.2 随机数生成
使用Math类的random方法,动态初始化
生成常见随机数的方法
1、[ 0,1 )
double d = Math.random();
2、double型[0,99)
double d = Math.random()*99;
3、int型[0,99)
int i = (int) Math.random()*99;
总结:99是可以变的,如果要生成[0,50),
那就int i = (int) Math.random()*50;
4、int型[0,99]
int i = (int) Math.random()*100;
5、[m,n)
double d = m+Math.random()*(n-m);
6、[m,n]
double d = m+Math.random()*(n-m+1);
5.5 数组排序
5.5.1 排序(冒泡)
int[] nsum={85,88,99,15,68}; for(int i=0;i<nsum.length-1;i++){ for (int j=0;j<nsum.length-1-i;j++){ if(nsum[j]>nsum[j+1]){ int temp = nsum[j]; nsum[j] = nsum[j+1]; nsum[j+1] = temp; } } } for(int i=0;i<nsum.length;i++){ System.out.println(nsum[i]); }
5.5.2 Arrays.sort()
5.7 多维数组(选)
5.7.1 二维数组的声明、创建
在Java中,多维数组(multidimensional array)实际上是数组的数组。
下面声明了一个名为twoD的二维数组:
本质上,Java中只有一维数组。
int[][] twoD = new int[4][5];
int[] 表示int类型的数组,即数组元素为int类型
int[][] 表示int[]类型的数组,即数组元素为int[]类型
5.7.2 单独为第二维分配内存
当为多维数组分配内存时,可以只为第一(最左边的)维指定内存,之后再单独为余下的维分配内存。
int twoD[][] = new int[4][];
twoD[0] = new int[5];
twoD[1] = new int[5];
twoD[2] = new int[5];
twoD[3] = new int[5];
对于这种情况,第一维的长度必须指定。
int twoD[] = new int[][]; //错误
第二维的长度可以不同:
int twoD[][] = new int[4][];
twoD[0] = new int[1]; //twoD[0],本质是一维数组
twoD[1] = new int[2];
twoD[2] = new int[3];
twoD[3] = new int[4];
5.7.3 为二维数组使用初始化器
int[][] i= new int[3][];
int[] a1 ={1,2,3};
int[] a2 ={4,-5,6,9,0,8};
int[] a3 ={7,8};
下面这行代码 String[][] s=new String[10][];
A s 是一10行10列的数组。
B s 是一包含10个一维数组的二维数组。
C s中每个元素都为null。
D 该行代码非法。
特别注意:
二维数组,创建数组是,[][] 第一个必须指明长度
声明的有效方式:
int[][ ] ia1 = new int[2][3];
int[][ ] ia2 = new int[2][];
ia2[0] = new int[2], ia2[1] = new int[3];
Teacher[][] ta;
ta = new Teacher[2][];
ta[0] = new Teacher[3];
ta[1] = new Teacher[4];
无效的声明方式
int[][ ] ia1 = new int[][3];
Teacher[][] ta = new Teacher[][5];
5.8 Arrays
数组操作的工具类
使用Arrays类对数组进行排序,查找元素
Arrays.sort(XXX);