1.数组初始化
1.1动态初始化(声明并开辟数组)
数据类型[] 数组名称 = new 数据类型 [长度]
eg:
int[] data = new int[5];声明并开辟一个整型数组。
a.数组通过下表索引来取得元素,下标默认从0开始。数组下标超出数组长度,回报一个数组越界异常(运行时异常)。
b.数组中每个元素都有默认值,并且默认值是该数据类型默认值。
c.数组名称.length:取得数组长度
d.数组遍历推荐使用for-each循环(仅限于数组内容读取),要修改数组内容,还是使用常规的for循环
for-each循环:for(int x : data) {...}
int[] date = new int[5];
date[0] = 1;
date[1] = 2;
for(int x:date){ //JDK1.5 提供for-each循环,遍历数组
System.out.print(x+" ");
}
System.out.println();
数组属于引用数据类型,必须在使用前先初始化。否则会NullpointerException(运行时异常)。
引用传递:多个栈内存指向同一个堆内存。int[] temp = x;
int[] date = new int[5];
int[] temp = date; //引用传递 c:int *tmp[] = &date;
temp[2] = 50;
System.out.println(date[2]);
//结果:50
1.2数组静态初始化 ( 在数组定义时直接设置内容,根据值的个数确定数组长度,并且长度不可修改)
简化格式:数据类型[] 数组名称 = {值,..,..}
完整格式(推荐):数据类型[] 数组名称 = new 数据类型[]{值,...,...}
eg:
int data = new int{1,2,3,4,5};
匿名数组--没有任何栈内存指向的数组。System.out.println(new int{1,2,3}[0]);
System.out.println("匿名数组"+(new int[]{1,2,3}[0]));
//结果:1
1.3二维数组
动态初始化:数据类型[][] 数组名称 = new 数据类型[行个数][列个数]
eg:
int[][] data = new int[3][4]; //开辟一个3行4列的整型数组
静态初始化:数据类型[][] 数组名称 = new 数据类型[][]{{第一行的值},{第二行的值},...};
int[][] date2 = new int[][]
{
{1,2},{3,4,5},{6,7,8,9}
};
for(int x = 0;x<date2.length;x++){
for(int y = 0;y < date2[x].length;y++){
System.out.print(date2[x][y]+",");
}
}
//结果:1,2,3,4,5,6,7,8,9,
数组与方法的互操作---引用传递
方法接受数组
public static void printArray(int[] data){
for(int temp : data){
System.out.print(temp+",");
}
}
方法返回数组
方法修改数组
2.java对数组的支持(应对笔试,可以直接调用)
2.1排序支持--java.util.Arrays.sort(数组名称);
支持所有基本数据类型
内部使用双轴快速排序
public class demo2{
public static void main(String[] args){
int[] data = new int[]{1,2,5,8,7,6,3};
Arrays.sort(data);
printArray(data);
}
public static void printArray(int[] data){
for(int temp : data){
System.out.print(temp+",");
}
}
}
2.2数组的部分拷贝
System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度);
2.3数组全拷贝(*****)
java.util.Arrays.copyOf(源数组名称,新数组长度); int[]
int[] data = new int[]{1,2,3,4,5,6,7,8,9};
int[] temp = Arrays.copyOf(data,data.length+1);
//结果:1,2,3,4,5,6,7,8,9,0
java动态数组扩容方法