数组
1、数组的定义
数组是用来存储同一类型若干数据的容器。数组是一种引用数据类型。
数组定义语法:
数据类型[] 数组名 = new 数据类型[长度]; (建议用这种)
或者:数据类型 数组名[] = new 数据类型[长度];
如:int [] data1 = new int[50]; //定义数组存储50个整型的数据
double[] data2 = new double[40]; //定义数组存储40个小数
char[] data3 = new char[20]; //定义数组存储20个字符
boolean[] data4 = new boolean[30]; //定义数组存储30个布尔值
String[] data5 = new String[10]; //定义数组存储10个String字符串,初始化 data5[i] = null
Student[] data6 = new Student[60]; //定义数组存储60个Student对象,初始化 data6[i] = null
new运算符在堆中分配一块连续的存储空间,这块连续存储空间可以存储5个int类型的数据,把这块存储空间的引用(起始地址)赋值给数组名 data,data数组名存储的是堆中数组的起始地址。
2、访问数组元素
通过索引值(下标)来访问数组元素,格式:数组名[索引值] = 值 ;
如:int[] data = new int[3];
data[0] = 123; data[1] = 456; data[2] = 789;
data[3] = 123; //运行后会产生 java.lang.ArrayIndexOutOfBoundsException:数组下标越界异常
遍历数组
for( int i = 0 ; i < data.length ; i++ ){
System.out.println( data[i] + "\t");
}
//或者用foreach循环
for( int aa : data2 ){
System.out.println( aa );
}
定义了数组之后 ,系统会给数组元素默认初始化
数据类型 | 默认初始值 |
整型(byte、short、int、long) | 0 |
浮点型(float、double) | 0.0 |
字符型char | 空 '\u0000' |
String | null |
布尔Boolean | false |
引用数据类型(类、接口) | null |
数组的动态初始化:先定义数组,再给数组的元素赋值
如:int [] a = new Int[2]; a[0] = 1; a[1] = 2;
数组的静态初始化:在定义数组的同时就给数组的元素赋值
如:int [] data3 = {1,2,3,4,5,6};
数组名之间可以相互赋值
3、数组扩容
数组扩容其实就是定义一个更大的数组,把原来数组中的元素复制到新数组中,让原来的数组名指向新的数组。
public class ArrayExpansion {
public static void main(String[] args) {
int [] data = {34,12,56,87,66};
//1)定义一个更大的数组
//int [] newdata = new int[ data.length + 1 ]; //新数组只比原来数组长度大1个
//int [] newdata = new int[ data.length * 2 ]; //新数组长度是原来数组长度的两倍
int [] newdata = new int[ data.length + (data.length / 2) ]; //新数组长度是原来数组长度的1.5倍
//2)把原来数组的内容复制到新数组中
for(int i = 0 ; i < data.length; i++) { newdata[i] = data[i]; }
//3)让原来的数组名指向新的数组
data = newdata;
//4)打印data数组中的元素
for (int a : data) { System.out.print(a+"\t"); }
}
}
执行结果:34 12 56 87 66 0 0
向数组中插入元素
publicclass ArrayExpansion {
publicstaticvoid main(String[] args) {
int[] data = {45, 12, 78, 56, 90, 55};
int[] d = insert(data,2,20); //在下标2位置插入数值20for (int a : d) { System.out.print(a+"\t"); } //打印数组中的元素
}
//给数组data下标i 位置插入一个 key值 publicstaticint[] insert(int[] data, int i, int key) {
int[] newdata = newint[data.length + 1];
for (int j = 0; j < i; j++) { newdata[j] = data[j]; } //复制[0,i)部分
newdata[i] = key; //插入新元素
for (int j = i; j < data.length; j++) { newdata[j+1] = data[j]; } //复制[i+1,data.length)部分
data = newdata;
return data;
}
}
输出结果:45 12 20 78 56 90 55