数组
一维数组
数组的定义: 用来存储多个元素的一个容器
数组可以存储基本数据类型也可以存储引用数据类型
格式:
格式1: 数据类型[] 数组名 ;
格式2: 数据类型 数组名[] ;
数组的初始化:
(1): 动态初始化 由我们给定数组的长度,由系统来分配初始化值
(2): 静态初始化 由我们给定初始化值,由系统来决定长度
注意事项: 不能进行动静结合
java语言的内存分配
(1): 栈: 存储的都是局部变量
局部变量: 就是在方法定义中或者方法声明上的变量
(2): 堆: 存储都是new出来的东西
特点:
(1): 系统会为每一个new出来的东西分配一个地址值
(2): 系统会为每一个元素赋一个默认的初始化值
byte,short,int,long --- 0
float,double --- 0.0
char --- '\u0000'
boolean --- false
引用数据类型 --- null
(3): 使用完毕以后就变成了垃圾,等待垃圾回收器对其回收
(3): 方法区(面向对象部分)
(4): 本地方法区(和系统相关)
(5): 寄存器(CPU)
内存图:
一个数组的内存图: 数组在内存中是如何构建的
二个数组的内存图: 每new一次会在堆内存中重新开辟空间
3个引用2个数组的内存图: 栈内存中的多个引用可以指向堆内存中的同一个地址
数组的静态初始化:
格式: 数据类型[] 数组名 = new 数据类型[]{元素1 , 元素2 , ....};
简化格式:
数据类型[] 数组名 = {元素1 , 元素2 , ...} ;
数组的常见操作:
(1): 遍历
public static void print(int[] arr){
System.out.print("[ ");
for(int x = 0 ; x < arr.length ; x++){
if(x == arr.length - 1){
System.out.println(arr[x] + "] ");
}else {
System.out.print(arr[x] + ", ");
}
}
}
(2): 获取最值
public static int getMax(int[] arr){
int max = arr[0] ;
for(int x = 0 ; x < arr.length ; x++){
if(arr[x] > max){
max = arr[x] ;
}
}
return max ;
}
(3): 反转
public static void reverseArr(int[] arr){
for(int x = 0 , y = arr.length - 1 ; x <= y ; x++ , y--){
int temp = arr[x] ;
arr[x] = arr[y] ;
arr[y] = temp ;
}
}
(4): 查表法
(5): 基本查找(查找某一个元素在数组中第一次出现的索引)
public static int getIndex(int[] arr , int value){
for(int x = 0 ; x < arr.length ; x++){
if(arr[x] == value){
return x ;
}
}
return -1;
}
public static int getIndex2(int[] arr , int value){
int index = -1 ;
for(int x = 0 ; x < arr.length ; x++){
if(arr[x] == value){
index = x ;
break ;
}
}
return index ;
}
二维数组
第一种经典格式:
数据类型[][] 数组名 = new 数据类型[m][n];
m: 在这个二维数组中有m个一维数组
n: 每一个一维数组的长度是n
非经典格式:
数据类型 数组名[][] = new 数据类型[m][n];
数据类型[] 数组名[] = new 数据类型[m][n];
第二种格式:
数据类型[][] 数组名 = new 数据类型[m][];
m: 在这个二维数组中有m个一维数组
而我们的每一个一维数组可以动态给出
第三种格式:
数据类型[][] 数组名 = new 数据类型[][]{{元素...} ,{元素 ....} ,{元素...}....};
简化格式:
数据类型[][] 数组名 = {{元素...} ,{元素 ....} ,{元素...}....};
遍历二维数组
public static void print(int[][] arr){
for(int x = 0 ; x < arr.length ; x++){
for(int y = 0 ; y < arr[x].length ; y++){
System.out.print(arr[x][y] + "\t");
}
System.out.println();
}
}
两个练习: 求年销售额 , 杨辉三角
java语言中的参数传递问题
基本数据类型的参数传递,形式参数的改变对实际参数没有影响
引用数据类型的参数传递,形式参数的改变对实际参数是有直接影响的
java中只有值传递,没有址传递
|
|