一、数组的基本使用
二、数组的常见错误
三、二维数组的使用
四、Arrays类的操作数组
为什么需要数组,数组可以更好的保存每一个变量,声明一个变量就是在内存空间划出一块合适的空间,声明一个数组就是在内存空间划出一串连续的空间,数组是一个变量,存储相同数据类型的一组数据
一、数组的基本使用
数组基本要素:
标识符-->数组名 数组元素-->值 元素下标-->从0开始 元素类型-->类型
如何使用数组:
一、声明数组:int[] a;
声明数组就是告诉计算机数据类型是什么,声明数组时不规定数组长度,
语法:
①、数据类型 数组名[];
②、数据类型[] 数组名;
通常使用的是第二种语法。
二、分配空间:a= new int[5];
分配空间就是告诉计算机分配几个连续的空间,在[]里面写上数值
因为下标是从0开始的,所以定义了是五个空间,a[4]是a数组最大的一个
三、赋值:a[0]= 8;
数组赋值就是向分配的格子里存放数据。
这里的意思是给第一个格子赋值8
赋值方法:
①、边声明边赋值:int[] a = {1,2,3}; int a = new int[]{1,2,3};(不能指定长度)
②、动态的从键盘录入信息并赋值,这里可以使用循环的方法
Scanner sr =new Scanner(System.in);
for(int i =0; i<30 ; i++){
a.[i] = sr.nextInt();
}
四、处理数据:a[0] = a[0]*10;
因为数组是一个变量,所以数组里面的值也是可以进行正常的加减乘除运算
二、数组的常见错误
一、定义一个数组a,打印输出a的值是数组的地址值而不是数组里面的数,想要打印数组里面的数可以使用循环的方式,一个一个输出打印。
二、定义数组长度必须保持不变,后期不能更改,避免越界。
三、数组中的所有元素必须属于相同的数据类型。
数组的要素:
类型 [] 数组名 = new 类型[长度];
new数Java中在内存开辟空间的方式,优先级是Java中最高的
声明数组的[] 是可以任意放
数组赋值:
可以声明和赋值一起
①、int[] a = {1,2,3,4,5};
相当于new了一个长度为五的数组;
②、int[] b = new int[]{1,2,3,4,5};
中括号不能填写数组长度,应为后面已经定义了数组长度
这两种方法也不能分开写
int[] c;
c = {1,2,3};这样是错误的,不能分开赋值,创建数组并赋值的方式必须在同一语句中完成
③、可以循环的利用动态从键盘录入赋值
四、两个数组如果数组里面的内容一样,但是两个数组并不相等因为地址值不一样。
五、int[] a =b ;
是把b的地址值赋值给a,所以两个数组是相等的,这时候a里面的元素改变了之后,b里面的元素也改变了。
六、查看数组的长度可以使用.lenght,比如a.lenght就是a的数组长度了。
七、数组越界不会编译报错,会运行报错,因为没有运行所以计算机不会知道数组长度
三、二维数组的使用
二维数组本质上是一维数组,其中的元素为一维数组。
定义二维数组:
①、int[] a = {{1},{1,2},{1,2,3}};直接赋值
②、int [] [] a = new int[5][];
其中第一个[]表示二维数组的长度,也就是二维数组有几个元素,所以是必须定义的,
第二个[] 表示的是在二维数组中这个元素的第几个元素,例如[2][3];表示的是二维元素的第二个当中的第三个元素,在定义时可以不用定义。
二维数组和一维数组一样,定义类型是什么,二维数组中的值就是什么类型
四、Arrays的使用
Arrays类是提供操作数组的方法,如:排序、查询等等作用。
使用Arrays类首先需要导包,java.util.Arrays
方法名称 | 说明 |
---|---|
boolean equas(a1,a2) | 比较a1和a2两个数组是否相等 |
sort(array) | 对数组array的元素进行升序排列 |
String toString(a) | 将一个数组a转换成一个字符串 |
void fill(array,val) | 把数组array所有元素都赋值为val |
copyOf(array,lenght) | 把数组array复制成一个长度为lenght的新数组,返回类型与复制的数组一致 |
int binarySeach(array,val) | 查询元素值val在数组array中的下标(要求数组中的元素已经按照升序排列) |
package demo01;
//Arrays的用法
import java.util.Arrays;
public class demo05 {
public static void main(String[] args) {
int[] a = {5,9,6,7,8,3};
Arrays.sort(a);
//让数组a里面的元素升序排列
int[] b = {5,9,6,7,8,3};
System.out.println(Arrays.toString(a));
//让数组通过【】形式输出
System.out.println(Arrays.binarySearch(a, 3));
//查找3在a数组元素中的下标
System.out.println(Arrays.equals(a, b));
//判断两个数组里面的元素是否相等,a[0]比b[0]的形式
int[] c = Arrays.copyOf(a,3);
//复制a数组的元素,3表示c的长度,不够就借到当前位置,多了就补零
System.out.println(Arrays.toString(c));
Arrays.fill(c, 3);
//让c数组元素里面都变成3
System.out.println(Arrays.toString(c));
}
}
copy如果长度和他复制的数组长度不一样,小于的话就会截取掉,只截取到新数组长度的位置,多了的话就会自动补零
copyOfRange(a,1,3)表示创建一个长度为三的数组截取a数组从下标1开始
binarySearch如果查找的下标不存在就会返回负数,且数组必须先排序完之后再用,否则会报错
多维数组:
三维及以上的数组很少使用,主要使用二维数组,从语法上Java支持多维数组
从内存分配原理角度讲,只有一维数组。