什么是数组?
同一种类型数据的集合,也就是一个容器。运算的时候有很多数据参与运算,那么首先需要做的是什么.不是如何运算而是如何保存这些数据以便于后期的运算,那么数组就是一种用于存储数据的方式,能存数据的地方我们称之为容器。
数组的本质:
就是去申请一串连续的内存空间,这个对象arr就指向这个这串内存单元的第一个值
数组的好处:
当我们需要求1000个学生的平均分的时候,不可能去找1000个变量赋值,这样可以,只不过太过于麻烦,于是,引进来了数组,它能给存进来的数据进行自动编号,注意编号从零开始,方便操作这些数据。
数组的声明大致分为两种:
①声明数组的同时,指定它的长度
②声明数组的同时,指定里面的值
比如:
①int arr[] = new int[10];指定数组长度为10
②int arr[] = {1,2,3,4,5}指定里面的值
二维数组的声明和一维数组其实都一样,只是多了一个索引值。
①int arr[][] = new int[10][10];
②int arr[][] = {{1,2,3,4,5},{1,2,3,4,5}};
1)数组里面存的都是同一类型数据的集合
a. 即可以是基本类型,也可以是对象类型;
b. 数组中的每个数据为元素;
2) 数组是一个对象,成员是数组长度和数组中的元素;
3) 声明了一个数组变量并不是创建了一个对象;
数组的遍历:
我们知道拿到数组里的值,其实就是把它的下标依次改变就行了,下标从0开始,所以,我们可以通过for循环去遍历数组、或者foreach(也叫增强for循环)去遍历,其遍历的方式为:
拿一维数组举例:
int arr[] = {1,2,3,4,5};(1)for(int i = 0;i<arr.length;i++){ System.out.println(arr[i]); }(2)for(int i:arr){ System.out.println(i); }
当我们的数组中没有值时,它们都有默认值。
下面是对应的默认值:
byte/short/int/long 0
float 0.0f
double 0.0d
String null
char '\u0000'
boolean false
放大数组:
怎么把一个数放到一个指定长度数组里,可是这个数组里都有值,没地方去存,可以先将这个数组进行放大,通过arr =Arrays.copeOf(arr,arr.length+1)此时的arr已经进行了长度+1,并最后一位有个初值0,然后可以通过fill进行填充
复制数组copyOf(arr,int newlenth)
数组查询 binarySearch(Object[]arr,Object key)使用的前提: 数据排好序
int a = Arrays.binarySearch(arr,3);
如果存在多个值,查询的时候会从前往后一次查找,直到找到一个这个值为止,后面还有也不会继续查找。
给数组从小到大进行排序
Arrays.sort(arr);
数组的排序分为两种:
①冒泡排序
相隔的数去做比较,大的像后冒泡,通过一直去循环,最后小的都在前面,大的在后面。
int arr[] ={7,5,6,2,4,3,1};//声明一个数组for (int i = 1;i<arr.length;i++){//循环数组中的所有元素 int index=0;//声明变量用来接收较大的那个下标 for (int j = 1;j<=arr.length-i;j++){ if (arr[j] > arr[index]){//如果arr[j]大于arr[index] 进入判断 index = j;//把j 赋值给 index } } int midd = arr[index];//两个值去交换,需要一个中间值midd arr[index] = arr[arr.length-i];//arr[index]就是最后一个元素 arr[arr.length-i]=midd;}
②选择排序
拿到第一个数依次和后面所有的值作比较,如果小于则交换位置,最后找到第一个最小值,然后再以此类推,完成排序。
int min = 0;for(int i =0;i<arr.length;i++){ int index = i; for(int j =i+1;j<arr.length;j++){ if(arr[index]>arr[j]){ index = j; } } min = arr[index]; arr[index] = arr[i]; arr[i] = min;}