JAVA初学——数组

1.概念:一组连续(线性)的存储空间,存储多个相同的数据类型的值
1.1特点:类型相同 长度固定

2数组的创建
int[ ] a = new int[5]; //创建数组并固定数组的长度
int a[ ] = new int[5];
声明 int 数组类型变量,定义变量名为 a 分配长度为5 的连续空间在这里插入图片描述
每一个小块都是数组元素 || 可以存储5个int 类型的值

数组中的每个数据格被称为“数组元素”
对每个元素进行赋值或取值的操作被称为“元素的访问”
访问元素时,需要使用“下标”(从0开始,依次+1,自动生成,且最大为数组长度-1)
访问的语法:数组名[下标]; // 例如 存a[0]=10; 取 a[0];

下标取值有效范围: 0 ~ 数组长度 - 1
遍历:从头至尾,逐一对数组的每个元素进访问。
a.length 数组名.length 可动态获取数组长度
a[i] 使用循环便利“i”充当下标,逐一访问数组中的每个元素
3.数组的默认值
在没有为数组元素赋值的情况下,依旧可以正确访问
整数: 0
小数:0.0
字符:\u0000
布尔:false
其他:null
4.数组的创建语法
4.1先声明,再分配空间
数据类型[] 数组名;
数组名 = new 数据类型[长度];
4.2声明并分配空间
数据类型[] 数组名 = new 数据类型[长度];
4.3声明并赋值(繁)
数据类型[] 数组名 = new 数据类型[]{value1,value2,…}
4.4声明并赋值(简)
数据类型[] 数组名 = {value1,value2,…};
//显示初始化,且不可换行
5.数组的扩容‘
创建数组时,必须显示指定长度,并在创建之后不可更改长度
5.2扩容的思路
创建大于原数组长度的新数组
将原数组中的元素依次复制到新数组中
5.3数组的复制
循环 将原数组中的所有元素,逐一赋值给新数组
System.arraycopy(原数组名字,原数组起始位置,新数组名字,新数组起始位置,长度);
java.util.Arrays.copyOf(原数组名字,新长度);//返回带有原值的新数组
6.地址替换
数组作为引用类型之一,其变量中存储的是数组的地址
完成元素复制后,需将新数组地址赋值给原变量进行替换
nums地址 0x0000A0011 里面存着 11 22 33 44 55 值
通过newNums地址0x0000B0022 将值复制进去后 11 22 33 44 55 0 0 0 0 0
再将地址newNums的地址赋值到nums 中
6.1.基本数据类型的变量存储的是值
6.2 引用数据类型的变量存储是地址
6.3 nums = newNums // 将新数组的地址,赋值给nums变量,进而在后续作nums时,则操作长度更大的新数组
7.数据类型的参数

int[] nums = {11,22,33,44,55};
printArray(nums); 
// 假设 nums 的地址是0x000A01 那么传参后 oneArray的地址为0x0000A01
{
	public static void printArray(int[] oneArray){
		for(int i  = 0 ; i < oneArray.length; i++){
			System.out.println(oneArray[i]);
		}
	}
}

方法调用时,将nums 中的地址赋值给oneArray,此时二者指向同一个数组
①基本数据类型的传递,是“值”的传递,一方改变,不会影响另一方
②引用数据类型的传递,是“地址”的传递,一方改变,会影响另一方
7— 栈和堆
JVM栈空间(局部变量)
int a = 10; int b = a;
Heap 堆空间(对象,数组)
所有对象,包括数组必须分配在堆空间里(为?)
①这块空间是我们Java程序员,在管理角度来讲,能操作的最大操作空间
②Java中有七种垃圾收集器,可以帮助我们自动完成收集工作

int[] oldArray = new int[4];
局部变量 int[] oldArray
new int[4] 即在堆空间中分配地址为0x0000A01的4个小空间
/= 表示 两者通过 引用reference 或 句柄 来连接

8.数据类型返回值

int[] oa = {11,22,33,44,55};  //0x0000A111
int[] na = expand(oa);
for(int i = 0; i < na.length; i++){
	System.out.println(na[i]);
}
public static int[] expend(int[] oldArray){//0x0000A111
	int[] newArray = new int[oldArray.length*2];//0x0000B222
		for(int i = 0; i < oldArray.length; i++){ //遍历
			newArray[i]=oldArray[i];
		}
		return newArray; // 0x0000B222  返回值长度为10的newArray
}

创建新数组,长度为原数组的2倍,新数组中保留原有数据,返回新数组
System.out.println(Array.toString(oa));
9.可变长参数
9.1概念:可接收多个同类型实参,个数不同,使用方式与数组相同。
9.2语法:数据类型 …形参名 // 必须定义在形参列表的最后,且只能有一个,支持0~N个参数
int… = int[] String… = String[] char…= char[]
double… = double[] method(xxx,xxx[],xxx…);
//可变长参数,是对数组的一种便利写法的补充(80%的场景用数组,20%的场景用可变长参数)
可接受零散的数据,个数不限
不在接收数组
且在函数内部,仍旧是多个值的意思
① int… array == > int[] array
② printArray{1,2,3,4,5} //零散数据导入
printArray(int array);//函数
10.排序
冒泡排序
相邻的两个数值比较大小,互换位置
记忆: 外层 length - 1; 内层 length -1-i
补充: 嵌套循环 约定俗成的变量命名
一重循环 i ,二重循环 j,三重循环k

int[] array = {2,44,4,11,1}
	int temp = 0;
	for(int i = 0; i < array.length - 1 ; i ++){
		for(int  j= 0 ; j < array.length -1-i ; j++){
			if(array[j]>array[j+1]){
				temp = array[j+1];
				array[j+1] = array[j];
				array[j]= temp;
			}
		}
	}
	for(int i = 0 ; i < array.length; i++){
		System.out.println(array[i]);
	}

选择排序
固定值与其他值比较大小,互换位置。
记忆: 外层 length-1; 同时外层i作为固定值,内层的j = i +1 ;作为其他值的起始

int[] scores = {1190,222,1,3,2222};
int temp = 0;
	for(int i = 0 ; i <scores.length-1; i ++){
		for(int j = i+1 ; j < scores.length ; j++){
			if(scores[i] > scores[j]){
			temp = scores[i];
			scores[i] = scores[j];
			scores[j]  = temp;
		}
		}
	}
	for(int i = 0 ; i < scores.length; i++){
		System.out.println(scores[i]);
	}

JDK排序
java.util.Array.scort(数组名);//JDK提供(升序)

int scores[]={89,56,45,78,12,3};
java.util.Arrays.sort(scores);//JDK排序 只能做升序

11.二维数组
①概念: 一维数组中的一堆数组,数组中的元素不是数组
(例如:在excle中查找的某一表格 有行有列 , 二维数组相当于一个多行多列的表格)
/X[高维(行)][低维(列)]

int[][] array = new int [3][5];
	array[0][0] = 10; 
	array[0][3] = 20;
	array[1][1] = 30;
	array[1][2] = 40;
	array[2][4] = 50;
	
		0   1   2   3   4   5
	0   10  0   0   20  0   0
	1   0  30   40   0   0  0
	2   0   0   0    0   0  50

③注意高维数组中的每一个元素,保存了低维数组的地址
访问 array[0]等价于在访问0x0000A11(“二维数组的内存分配图”)
12.二维数组的创建语法
现声明再分配空间
数组名 = new 数据类型[高维长度][低维长度]
声明并分配空间
数据类型[] [] 数组名 = new 数据类型[高][低]
声明并赋值(繁)
数据类型[][] 数组名 = new 数据类型[高][]
// 不规则数组,自行new 低维数组
声明并赋值(简)
数据类型[] 数组名 = {{v1,v2,v3},{v1,v2},{v1,v2,v3,v4}}
//显示初始化
13 数组(插入,扩充)

static int[] nums = new int[5];
public static void main(String[] args){
	nums[0]=11;
	nums[1]=22;
	nums[2]=33;
	nums[3]=44;
	print(); //打印数据 // 遍历
	insert(55); //插入数据
	print(); // 遍历
}
	public static void insert(int value){
		for(int i = 0 ; i <nums.length ; i++){//查找 值为0时 赋值
			if(nums[i] == 0){
				nums[i] = value;
				break;
			}
		}
	}
	public static void print(){
		for(int i = 0 ; i < nums.length ; i++){
			System.out.print(nums[i]+"\t");
		}
		System.out.println();
	}

14.杨辉三角,
杨辉三角

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值