java数组
1.1 数组
数组是一种特殊的数据类型(引用数据类型),这种数据类型用于存储一组数据类型相同的数据。简单来说,数组就是一个容器,用于存储一组数据,这组数据具有相同的数据类型。
数组中的每个数据称为数组的元素。
数组就是在iava中定义的用来一次性保存多个具有相同的数据类型的数据容器。
数组具有3个特点:
1.数组中的元素具有相同的数据类型。
2.数组的容量是确定的。—创建数组的时候确定其容量。长度一旦被定义,永不可变
3.数组是引用数据类型,不是基本数据类型
1.2 为什么使用数组
使用数组有以下原因:
1.简化代码:数组能存储━组数据,因此可以将多个变量合为一个变量。
表示一组数据,可以定义多个变量,但是代码量大。使用数组的话,只需要一个变量就能存储—组数据。
⒉.便于批量操作数据:数组和循环经常搭配使用,通过循环可以操作每一个数据。
例如:有一组订单,现在需要对订单按天进行统计销售额。可以使用一个循环,遍历每一个订单,属于同一天的订单进行求和。
如果每个订单都用一个变量保存的话,就没有办法使用循环进行操作。
1.3 数组的定义
数据在java中经常被使用,有很多方式定义数组
数组的定义和方式和变量比较类似,驼峰式命名
数组的声明
格式:
方式一: 数据类型 【】 数组名;
方式二: 数据类型 数组名 【】;
赋值:
方式一:数据类型 数组名 【】={};
方式二:数据类型 数组名 【】=new 数据类型【】{};
int []a1; //声明数组
int a2[];
// 初始化 -- 赋值 -- 静态赋值
a1=new int[10]; //赋值 创建对象 容器空间为10
// 系统默认值 -- 0
System.out.println(a1[1]);
1.4 数组的默认值
数组是引用数据类型,是一种特殊的数据类型,该类型如果没有赋予数据,则有默认值。
类型名 | 数据类型 | 默认值 |
---|---|---|
整数类型 | byte short int long | 0 |
浮点类型 | float double | 0.0 |
字符类型 | char | 空白 |
布尔类型 | boolean | false |
字符串类型 | String | null |
1.5 数组的遍历
数组的遍历就是使用循环结构把数组中的所有的元素全部获取出来并做处理。
int age[]={12,23,22,11,21};
// 普通for循环 0---数组名.length
for(int i=0;i<age.length;i++){
System.out.println(age[i]);
}
// 加强型for循环
for(int ag:age){ //特殊的循环,目前只用于数组遍历
System.out.println(ag);
}
2.1 内存中的数组
Java语言对内存做了若干个分区,最为重要的2个分区是:堆区和栈区。
栈区:用于存放局部变量的内存区域。
局部变量:方法内定义的变量,包括方法的参数。
栈内存一般用来存放基本数据类型定义的变量的。
栈区由系统管理,系统为每个变量分配一个区域。以栈的方式管理变量的生命周期。
堆区:唯一一个程序员可以操作和使用的内存区域。
堆内存一般用来存储引用数据类型定义的数据的。
堆区必须通过new来开辟空间。
程序员只负责开辟和使用堆区空间,Java的垃圾回收机制会在堆区内存不再使用的时候
2.2 数组在内存中的表示
一般的变量都保存在栈内存中。
引用数据类型的数组使用new关键字创建时,会在堆内存中开辟空间,用来保存多个数据。
一个新的数组指向一个在堆内存里面有数据的首地址,则共享其对应的堆内存里面储存的数据
int array[]={10,20,30};
// array2 和 array共享首地址
int array2[]=array;
3.1 随机数
在java的开发中,有时候需要生成随机的数字,这样我们就可以使用Random来实现。
随机数:
1.导入Random的包
2.创建对象
3.调用方法
- 获取【min,max)的随机数据(包含左不包含右)
random.nextInt(max-min)+min;- 获取【min,max】的随机数据
random.nextInt(max-min+1)+min;
Random rand = new Random();
for(int i=0;i<10;i++){
int n = rand.nextInt(10); //动态获取一个随机的整数数据
System.out.println(n); // [0,10)
}
// [33,100)
System.out.println(rand.nextInt(100-33)+33);
// [33,100]
System.out.println(rand.nextInt(100-33+1)+33);
4 数组案例
1.定义一个长度为5的数组,用随机数生成的方法对数组进行赋值并找出最大值
Random rand = new Random(); //创建随机数对象
int arr[]=new int[5]; //定义数组
int max=-10000;
for (int i = 0; i < arr.length; i++) { //遍历
arr[i]=rand.nextInt(100)+1; //生成随机数赋值给数组【1,100】
if(arr[i]>max)max=arr[i]; //判断最大值
System.out.println(arr[i]);
}
System.out.println(max);
2.定义一个长度为5的数组,从控制台动态的输入5个成绩,保存到数组中,遍历并计算所有成绩的总成绩、平均成绩。
int arr[] = new int[5]; //定义数组
Scanner sc = new Scanner(System.in);
int sum=0; //总值
double avg=0; //平均值
for(int i=0;i<arr.length;i++){ //动态输入成绩到数组中
System.out.println("输入成绩:");
arr[i] = sc.nextInt();
sum+=arr[i]; //计算总值
}
avg=sum*1.0/arr.length; //计算平均值
System.out.println("总:"+sum+"\n平均:"+avg);
3.合并数组,定义两个数组,最终合并为一个大数组。
int arr1[]={1,2,3,4,5};
int arr2[]={6,7};
int arr3[]=new int[arr1.length+arr2.length];//将合并后数组的长度定义为两个数组长度之和
for(int i=0;i<arr1.length;i++){ //将第一个数组的值赋值到大数组
arr3[i]=arr1[i];
}
for(int i=0;i<arr2.length;i++){ //将第二个数组的值复制到大数组
arr3[i+arr1.length]=arr2[i]; //下标加上第一个数组的长度
}
for(int gg:arr3){ //加强for循环 遍历输出合并后的数组
System.out.println(gg);
}