目录
数组概念
一次性声明大量的用于存储数据的变量,要存储的数据通常都是同类型数据
数组是一种用于存储多个相同类型数据的存储模型
数组定义格式
格式1:
数据类型[] 变量名
范例:
int[] arr
格式2:
数据类型 变量名[]
范例:
int arr[]
多维数组定义格式
格式1:
数据类型[] [] 变量名
范例1:
int[][] arr
格式2
数据类型 变量[][]
范例:
int arr[][]
数组的初始化概念
java中的数组必须先初始化,然后才能使用
初始化就是为数组元素分配内存空间,并为每个元素赋值
动态初始化
初始化时指定数组的长度,由系统为数组分配初始值
格式:
数据类型[] 变量名 =new 数据类型[数组长度];
范例:
int[] arr =new int[4]
//动态初始化
public class ForForDemo {
public static void main(String[] agrs){
int[] arr =new int[3];
//左边
//int:说明数组的元素类型是int
//[]:说明是一个数组
//arr:数组的名称,存放数组的地址
//右边
// new:为数组申请内存空间
//int:说明数组中的元素类型是int
//[]:说明这是一个数组
//3:说明数组的长度,也就是元素的个数
}
}
数组静态初始化
静态初始化,初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:
数据类型[] 变量名= new[] 数据类型[]{数据1,数据2,数据3,......};
范例
int[] arr=new int[]{1,2,3};
简化格式:
数据类型[] 变量名={};
范例:
int[] arr={1,2,3};
public class ForForDemo {
public static void main(String[] agrs){
int[] arr={1,2,3};
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
数组元素的访问
数组变量访问方式
格式:
数组名
数组内部保存数据的访问方式
格式:
数组名[索引]
索引
是数组中的数据的编号方式
作用:索引用于访问数组中的数据使用,数组名[索引]等同于变量名,是一种特殊的变量名
特征1:索引从0开始
特征2:索引是连续的
特征3:索引逐一增加,每次加1
public class ForForDemo {
public static void main(String[] agrs){
int[] arr =new int[3];
//访问数组
//输出数组
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
内存分配
java程序在运行时,需要在内存中分配空间,为了提高运算效率,就对空间进行了不同的区域的划分,因为每一片区域有特定的处理数据方式和内存管理方式。
int[] arr =new int[3];
//访问数组
//输出数组
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
new int[3] 在堆区分配内存,并将地址返回
arr存放堆区的内存地址
栈内存:存储的是局部变量
定义在方法中的变量,如arr
使用完毕,立即消失
堆内存:存储new出来的内容(实体,对象)
数组在初始化时,会为存储空间添加默认值
整型:默认值0
浮点型:默认值0.0
布尔值:默认值false
字符:默认值空字符
引用数据类型:默认值是null
每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时被回收
public class ForForDemo {
public static void main(String[] agrs){
int[] arr =new int[3];
//访问数组
//输出数组
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
arr[0]=100;
arr[2]=200;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
public class ForForDemo {
public static void main(String[] agrs){
int[] arr =new int[2];
int[] arr2=new int[3];
//访问数组
//输出没有赋值前的数组
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[2]);
arr[0]=100;
arr2[0]=200;
arr2[2]=300;
//输出赋值后的数组
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[2]);
}
}
多个数组指向相同
public class ForForDemo {
public static void main(String[] agrs){
int[] arr=new int[3];
arr[0]=100;
arr[1]=200;
arr[2]=300;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//定义一个新数组,并将其指向 arr数组
int[] arr2=arr;
arr2[0]=111;
arr2[1]=222;
arr2[2]=333;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr2);
System.out.println(arr2[0]);
}
}
aar和arr2指向同一个内存,arr2改变影响到aar的值。
数据操作的两个常见问题
索引越界
访问了数组中不存在的索引对应的元素,造成索引越界问题
int[] arr =new int[3];
//访问不存在的索引
System.out.println(arr[3]);
空指针异常
访问的数组已经不在指向堆内存的数据,造成空指针异常
int[] arr =new int[3];
System.out.println(arr[2]);
arr=null;
System.out.println(arr[0]);
null :空值,引用数据类型的默认值,表示不指向任何有效对象
数组常见操作
遍历
获取元素的个数
格式:
数组名.length
范例
arr.lenth
public class ForForDemo {
public static void main(String[] agrs){
int[] arr={11,22,33,44,55};
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
public class ForForDemo {
public static void main(String[] agrs){
int[] arr={11,22,33,44,55};
for(int i:arr){
System.out.println(i);
}
}
}
获取最值
public class ForForDemo {
public static void main(String[] agrs){
int[] arr={11,22,33,44,55};
int max=arr[0];
for(int x=1;x<arr.length;x++){
if(arr[x]>max){
max=arr[x];
}
}
System.out.println(max);
}
}
Arrays类
方法名 | 作用 |
---|---|
public static int binarySearch(int []a,int key) | 查找key在数组中的位置 |
public static void sort(int []a) | 对int类型的数组进行自然排序 |
public static void sort(int []a,int fromIndex,int toIndex) | 对int类型的a数组中下标从fronIndex到toIndex的元素进行排序 |
public static double[] copyOf(double[] original,int new Lenght) | 将original数组,复制到一个新的数组,新数组的长度为Lenght |
public static void fill(int [] a,int val) | 将val值填充到a数组中 |
public static void equals(boolean[] a,boolean[] b) | 比较数组中a和b中的Boolean是否相等 |
public static String toString(int[] a) | 将数组a转换成字符串 |