数组
数组的基本概念
数组:一种存储多个同种数据类型的值的容器。按照一定顺序排列的同种类型元素集合。数组中每一个元素都可以通过数组名和下标(索引)来确定。
数组的地址:数组在容器中的位置
例:[D@5536d9fc
- [:表示当前是一个数组
- D:表示数组元素类型为double
- @:表示一个间隔符号,固定值
- 5536d9fc:数组的真实地址
数组的定义
方式1
数据类型 [ ] 数组名
int [] array
方式2
数据类型 数组名 []
int array []
数组的初始化
初始化概念:在内存中维数组容器开辟一定空间用于存储数组中元素
静态初始化
利用现有的元素在数组中开辟一个固定的、静态的空间
格式:数据类型 [] 数组名 = new 数据类型[]{元素1,元素2,元素3};
例:int[] array = new int[]{1,2,3};
简化格式:数据类型 [] 数组名 = {元素1,元素2,元素3};
例:int[] array = {1,2,3};
动态初始化
动态初始化是指在初始化的时候只制定数组的长度,由系统为数组分配初始值
格式:数据类型 [] 数组名 = new 数据类型[数组长度];
例:int[] array = new int[3];
数组默认初始化值的规律
整数类型:默认初始化值为0
小数类型:默认初始化值为0.0
字符类型:默认初始化值为‘/u0000’空格
布尔类型:默认初始化值为false
引用数据类型:默认初始化值为null
静态初始化和动态初始化的区别
初始化类型 | 静态初始化 | 动态初始化 |
---|---|---|
指定内容 | 数组元素 | 数组长度 |
适用范围 | 知道具体元素 | 知道长度不知具体元素 |
数组的访问
格式:变量名=数组名[索引]
索引就是数组的编号,用来寻找数组中元素,从0开始依次递增
数组的遍历
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
数组的存储
格式:数组名[索引]=常量/变量
数组变量存储的是数组首元素的地址
int[] arr={1,2,3,4,5,6};
System.out.println(arr);
//输出结果为数组首元素在我的电脑里的十六进制地址
[I@46ac2687
java内存分配
- 栈:方法运行时使用的内存
- 堆:存储对象或者数组,new来创建的,都存储在堆内存
- 方法区:存储可以运行的class文件
- 本地方法栈:JVM在使用操作系统功能的时候使用,与我们开发无关
- 寄存器:CPU使用,与我们开发无关
拓展——二维数组相关内容
二维数组的初始化
二维数组的静态初始化
格式:数据类型[] [] 数组名 = new 数据类型[] []{{元素1,元素2,元素3},{元素1,元素2,元素3}};
例:int[] [] array = new int[] []{{1,2,3},{1,2,3}};
简化格式:数据类型[] [] 数组名 = {{元素1,元素2,元素3},{元素1,元素2,元素3}};
例:int[] [] array = {{1,2,3},{1,2,3}};
为了书写美观,我们一般会这样定义二维数组:
int[] [] array = {
{1,2,3},
{1,2,3}
};
二维数组的动态初始化
动态初始化是指在初始化的时候只制定数组的长度,由系统为数组分配初始值
格式:数据类型[] [] 数组名 = new 数据类型[m] [n];
例:int[] [] array = new int[3] [4];
特殊情况1:定义二维数组行数未定义列数
public static void main(String[] args){
//创建新二维数组
int[][] arr=new int[2][];
//定义两个新一维数组
int[] arr1={11,22};
int[] arr2={44,55,66};
//将二位数组的第一行和第二行分别用两个一维数组替换
arr[0]=arr1;
arr[1]=arr2;
}
特殊情况2:定义二维数组时未定义其内容
public static void main(String[] args){
//创建新二维数组
int[][] arr=new int[2][3];
//定义两个新一维数组
int[] arr1={11,22};
int[] arr2={44,55,66};
//将二位数组的第一行和第二行分别用两个一维数组替换
arr[0]=arr1;
arr[1]=arr2;
}
数组的操作
求最值
import java.util.Scanner;
public class Practise6_qiuzuizhi {
public static void main(String[] args){
int[] arr=new int[8];
//向数组中输入数据
for(int i=0;i<arr.length;i++){
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个整数:");
arr[i]=sc.nextInt();
}
//找出最大的
int max=arr[0];
for(int i=1;i<arr.length;i++){
if(arr[i]>max) max=arr[i];
}
System.out.println(max);
}
}
求和
import java.util.Scanner;
public class Practise7_bainliqiuhe {
public static void main(String[] args){
int[] arr=new int[8];
//向数组中输入数据
for(int i=0;i<arr.length;i++){
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个整数:");
arr[i]=sc.nextInt();
}
//遍历求和
int sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
System.out.println(sum);
}
}
交换数据
import java.util.Scanner;
public class Practise8_jiaohuanshuju {
public static void main(String[] args){
int[] arr=new int[8];
//向数组中输入数据
for(int i=0;i<arr.length;i++){
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个整数:");
arr[i]=sc.nextInt();
}
//交换数据
int temp;
for(int i=0;i<arr.length/2;i++){
temp=arr[i];
arr[i]=arr[arr.length-i-1];
arr[arr.length-i-1]=temp;
}
//打印结果
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
打乱数据
import java.util.Random;
import java.util.Scanner;
public class Practise9_daluanshuju {
public static void main(String[] args){
int[] arr=new int[8];
//向数组中输入数据
for(int i=0;i<arr.length;i++){
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个整数:");
arr[i]=sc.nextInt();
}
//打乱数据
Random r=new Random();
for(int i=0;i<arr.length;i++){
//设置一个随机索引,让索引指向的元素与y指向的元素交换
int randomindex=r.nextInt(arr.length);
int temp=arr[i];
arr[i]=arr[randomindex];
arr[randomindex]=temp;
}
//打印结果
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}