数组
- 概念:一组连续的存储空间,存储多个相同类型的值。
- 数组的创建
语法: 数据类型 [] 数组名=new 数据类型[长度]; 如:int[] a=new int[5];
- 数组的组成
- 数组中的每个“格子”被称为“数组的元素”.
- 对元素访问分为:“赋值”、“取值”。
- 访问元素时:通过“下标”。(下标从0开始,依次+1,自动自增)
- 访问语法:数组名[下标] 存: a[0]=10; 取:a[0]
- 下标范围:0~数组长度-1,如果不在有效范围之内,会产生数组下标越界异常。
- 错误
- 数组的遍历
概念:从头到尾,逐一对数组中的元素进行访问。
数组名.length 动态获取数组长度
语法:
for(数组元素类型 变量名:数组名){
变量名:代表数组中的每个元素
}
缺点:不能使用下标
- 数组的创建语法
A.先声明、再分配空间:
数据类型[] 数组名;
数组名 = new 数据类型[长度];
B.声明并分配空间:
数据类型[] 数组名 = new 数据类型[长度];
C.声明并赋值(繁):
数据类型[] 数组名 = new 数据类型[]{value1,value2,value3,...};
D.声明并赋值(简):
数据类型[] 数组名 = {value1,value2,value3,...}; //显示初始化,注意:不可换行
- 数组的内存
- 数组的扩容
- 创建数组时,必须显示指定长度,并在创建之后不可更改长度。
- 扩容思想
创建大于原数组长度的新数组。
将原数组中的元素依次复制到新数组中。
- 数组的复制
- 循环将数组中的元素依次赋值给新数组
- System.arraycopy(原数组名,原数组起始位置,新数组名,新数组起始位置,长度);
- 数组类型=java.util.Arrrays.copyOf(原数组名,新数组的长度);//根据长度创建新数组,并将原数组中的元素复制给新数组
- 数组类型参数
A.基本数据类型传参:值传递,一方改变,不影响另一方。
B.引用数据类型传参:值传递(地址值),一方改变,另一方改变。
九、可变长参数
概念:可接受多个同类型的实参,个数不限,使用方式与数组相同
语法:数据类型… 形参名 //必须定义在形参列表的最后,只能定义一个。
十.数组排序
相邻两个数值比较大小,互换位置。
口诀:记忆 外层循环length-1 内层循环length-i-1
public class TestBubble{
public static void main(String [] args){
int [] nums=new int []{1,3,2,7,5};
//冒泡排序:相邻两个数值比较大小,互换位置。
for(int i=0;i<nums.length-1;i++){//比较n-1回
for(int j=0;j<nums.length-1-i;j++){
if(nums[j]>nums[j+1]){
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
System.out.println("遍历数组");
for(int n:nums){
System.out.print(n+"\t");
}
System.out.println();
}
}
选择排序:
原理:固定值与其他值依次比较大小,互换位置。
口诀:记忆 外层循环length-1 内层循环j=i+1;j<length;i++;
public class TestSelect{
public static void main(String [] args){
//选择排序 固定值与其他值依次比较大小,互换位置。
int [] nums={4,3,5,2,1};
for(int i=0;i<nums.length-1;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]>nums[j]){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
}
System.out.println("遍历数组");
for(int n:nums){
System.out.print(n+"\t");
}
System.out.println();
}
}
十一.
二维数组:
1概念:一维数组中的一维数组,数组中的元素还是数组。
2.高维数组中的每一个元素,保存了低维数组的地址。访问array[0]等价于在访问0x0000A111