一.数组
数组是一种容器,可以用来存储同种数据类型的多个值;数组容器在存储数据的时候,需要结合隐式转换考虑。(最好保持数组的数据类型和存储的数据的类型一致)
1.数组的定义与初始化
int [ ] array 或者 int [ ] array
a.数组的静态初始化
初始化,就是在内存中为数组容器开辟空间,并将数据存入容器的过程;
完整格式:数据类型【】 数组名 = new 数据类型 【】 {元素1,元素2……}
简化格式:数据类型【】 数组名 = {元素1,元素2……},数组定义之后,其长度就不会发生变化
2.数组的地址值
在内存中的位置,直接打印数组名,结果会是数组的地址值
public class Test5arr {
public static void main(String[] args){
int arr [] = {1,2,3,4};
System.out.println(arr);
}
}
3.数组元素访问和添加
数据类型 变量名= 数组名[索引] 将这个元素赋值给变量
数组名[索引] = 具体数据/变量 将数据存储到数组中 一旦覆盖后,原来的数据就不存在了
4.数组的遍历
在Java中关于数组的长度属性length 调用方式:数组名.length
5.数组的动态初始化
初始化时只指定数值的长度,由系统为数组分配初始值
数组类型[] 数组名 = new 数组类型 [数组长度] int [ ] arr = new int [3];
数组默认初始化值的规律:
整数类型默认初始化值为0;小数类型为0.0;字符类型为空格;布尔类型为false;引用数据类型为null
只明确元素的个数,不明确具体的数值,使用动态初始化;需求中已明确数值,则直接动态初始化
6.数组常见操作
a.求最值
public class Test5arr {
public static void main(String[] args){
int [] arr ={33,5,22,44,55};
int max = arr[0];
for(int i = 0;i<arr.length;i++){
if(arr[i] > max){
max = arr[i];
}
}
System.out.println(max);
}
}
初始化值一定要是数组里面的值
b.求和并且统计个数
import java.util.Random;
public class Test5arr {
public static void main(String[] args){
int arr[]=new int[10];
Random r = new Random();
int count = 0;
int sum = 0;
for(int i = 0;i<arr.length;i++){
int number = r.nextInt(100)+1;
arr[i] = number;
sum =sum +arr[i];
System.out.print(arr[i]+" ");
}
System.out.println("sum:"+sum);
int avg = sum /arr.length;
System.out.println("avg:"+avg);
for (int i = 0;i<arr.length;i++){
if(arr[i]<avg){
count++;
}
}
System.out.println("count:"+count);
}
}
c.交换数据
public class Test5arr {
public static void main(String[] args){
//交换首位索引对应的元素
int []arr={1,2,3,4,5};
for(int i = 0,j=arr.length-1;i<j;i++,j--){
int temp =arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
for( int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
d.打乱数组中的数据
如何获取数值中的随机索引
int [] arr ={1,2,3,4,5}
Random r = new Random();
int randomindex = r.nextInt(arr.length);
System.out.println(randomindex);
import java.util.Random;
public class Test5arr {
public static void main(String[] args){
int [] arr ={1,2,3,4,5};
Random r = new Random();
for(int i = 0;i <arr.length;i++){
int randomindex = r.nextInt(arr.length);
// System.out.println(randomindex);
int temp = arr[i];
arr[i]=arr[randomindex];
arr[randomindex]=temp;
}
for( int i = 0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
7.数组的内存图
栈:方法运行时使用的内存,比如程序的主入口(main方法,开始时会进栈,代码执行完毕时会出栈
public class Test5arr {
public static void main(String[] args){
int arr1 []={11,22};//堆里面有一个地址存储11,22
int arr2 []=arr1;//将arr1的地址赋给arr2,即arr1和arr2指向同一个地址
System.out.println(arr1[0]);
System.out.println(arr2[0]);
arr2[0] = 33;
System.out.println(arr1[0]);
System.out.println(arr2[0]);
}
}
堆:用new关键字创建的,都存储在堆内 有一个地址值
当两个数组指向同一个小空间的时候,其中一个数组中对小空间的值发生了变化,其他数组访问的时候就是修改后的结果了