数组
相同类型的有序集合
相同类型的若干个数据,按照一定的次序排列组合而成。
每个数组元素可以通过一个下标来访问他们。
数组的声明和创建
首先要声明数组变量,才能在程序中使用数组。
dataType[] arrayRefVar; //首选
dataType arrayRefVar[] //效果相同
要使用new关键字来创建数组
dataType[ ] arrayRefVar = new dataType[arraySize];
数组通过索引来访问,从0开始。
数组长度是array.Length
int[] num1;//声明一个数组
num1 = new int[10];//这里面可以存是个int类型数字
num1[0] = 1 ;//给数组元素赋值
num1[1] = 2 ;
num1[2] = 3 ;
num1[3] = 4 ;
num1[4] = 5 ;
num1[5] = 6 ;
num1[6] = 7 ;
num1[7] = 8 ;
num1[8] = 9 ;
num1[9] = 10 ;
//计算所有元素的和
int sum = 0;
for (int i = 0; i < num1.length; i++) {
sum = sum+num1[i];
}
System.out.println(sum);
内存分析
数组声明的时候并不会存放在堆里面,只有创建的时候才会在堆里面。
一般声明和创建都写在一起
dataType[] arrayRefVar = new dataType[arraysize];
三种初始化
静态初始化 动态初始化 默认初始化()
//静态初始化:创建 + 赋值
int[] a = {1,2,3,4,5};
//动态初始化:包含默认初始化
int[] b=new int[10];
b[0] = 10;
数组的四个基本特点
长度确定。一旦被创建,大小不可以改变。
所有元素是相同的类型。
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,java中的对象实在堆中的,数组不管保存什么对象类型都是保存在堆中的。
数组边界
下表的合法区间:[0,array.Length-1] 超过这个区间就会报错
小结:
数组是相同数据类型的有序结合
数组就是对象。数组元素相当于对象的成员变量。
数组的长度是确定的,不可变的。如果越界就会报数组下标越界异常的错误。
数组的使用
for-each循环
int[] arrays = {1,2,3,4,5};
//JDK1.5才有 没有下标
for (int array : arrays) {
System.out.println(array);
}
//打印数组元素
} public static void printArray(int[] arrays)
{
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]+" ");
}
}
//反转数组
public static int[] reverse(int[] arrays)
{
int[] result = new int[arrays.length];
for (int i = 0,j=arrays.length-1; i < arrays.length; i++,j--)
{
result[j] = arrays[i];
}
return result;
}
多维数组
二维数组
int a[][] = new int[2][6];
//[4][2]
int[][] array = {{1,2},{3,4},{5,6},{6,7}};
System.out.println(array[0][0]);
System.out.println(array[0][1]);
for (int i = 0; i < array.length; i++) {
for (int j = 0;j < array[i].length;j++)
{
System.out.println(array[i][j]);
}
}
Arrays类
int[] a = {9001,222,432,1234,53453,12124};
//System.out.println(Arrays.toString(a));
//printArray(a);
Arrays.sort(a);//升序排序
Arrays.fill(a,10);//数组填充
System.out.println(Arrays.toString(a));
自己写一个打印方法
for (int i = 0; i < a.length; i++) {
if (i == 0)
{System.out.print("["+a[i]+",");}
else if(i == a.length-1)
{
{System.out.print(+a[i]+"]");}
}
else {
System.out.print(a[i] + ",");
}
}
冒泡排序
两层循环,外层是轮数,里层依次比较。
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0;j < array.length - 1;j++)
{
if (array[j]>array[j+1])
{
int m = 0;
m = array[j];
array[j] = array[j+1];
array[j+1] = m;
}
}
}
稀疏数组
一个数组中大部分元素为0,或者值相同,可以用稀疏数组来保存数组。
//创建一个稀疏数组的数组
int[][] array2 = new int[sum+1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
//存入稀疏数组
for (int i = 0; i < 11 ; i++) {
for (int j = 0,k = 1; j < 11; j++,k++) {
if (array[i][j]!=0)
{
array2[k][1] = i;
array2[k][2] = j;
array2[k][3] = array[i][j];
}
}

浙公网安备 33010602011771号