黑马程序员——数组
------- android培训、java培训、期待与您交流! ----------
1.数组的基本知识
定义:数组是同一种类型数据的集合,也就是一个存储数据的容器。
格式:type[ ] arrayName;或type arrayName[ ];
初始化:数组的初始化就是为数组的元素分配内存空间,并为每个数组元素赋初识值。
静态初始化:在初始化时就指定每个数组元素的初始值。例如:
arrayName=new type[ ]{e1,e2,e3...};
动态初始化:在初始化时只指定数组长度。例如:
arrayName=new type[length];
注意:数组是一种引用数据类型,只有对数组进行初始化后才可以使用。
数组中的元素从0开始编号。
数组在内存中的存储形式:
定义并初始化一个数组后,在内存中分配了两个空间。一个用于存放数组在内存中的地址值,另一个用来存放中的元素。
Java程序在运行时,需要在内存中分配空间。为了提高效率,对空间进行了不同区域的划分,因此每一片区域都有特定的处理数据的方式和内存管理方法。其中:
栈内存用于存储局部变量,当数据使用完,其所占空间会自动释放。
堆内存用于存储数组和对象等实体,通过new关键字建立的实体都将存放在堆内存中,每一个实体都有内存地址值。
2. 数组的基本操作
(1)数组的遍历
获取数组中的元素,通常会用到遍历。一般使用for循环。代码如下:
<span style="font-size:18px;">for(int i=0;i<array.length;i++){ //遍历输出数组的元素 System.out.println(array[i]); </span>
(2)数组的排序
I.选择排序:将指定角标上的元素一次与其他元素进行比较。
<span style="font-size:18px;"> public static void selectSort(int[] arr){ //外层循环控制比较的次数 for(int i=0;i<arr.length-1;i++){ //内存循环用来获取每一个元素 for(int j=i+1;j<arr.length;j++){ if(arr[i]>arr[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]); } } </span>
注意:选择排序内循环结束以此,最值出现在头角标位置上。
II.冒泡排序:相邻的两个元素进行比较,如果符合条件就交换位置。
<span style="font-size:18px;"> public static void maopaoSort(int[] arr){ //外层循环控制比较的次数 for(int i=0;i<arr.length-1;i++){ //内存循环用来获取元素进行比较元素,-i让每一次比较的元素减少,-1避免数组角标越界 for(int j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } }</span>
注意:内层循环参与比较的元素在逐级减少。
III.Java中已经定义好的一种排序方式,开发中对数组排序使用该方式:
Arrays.sort(type[] arr);
(3)数组的查找
获取指定元素第一次出现在数组中的位置。
I.普通查找
<span style="font-size:18px;"> public static int getIndex(int[] arr,int num){
//通过遍历数组元素,然后与指定元素值进行比较
for(inti=0;i<arr.length;i++){
if(arr[i]==num){
return i;
}
}
//如果指定元素在数组中不存在,则返回-1
return -1;
}
</span>
II.折半查找
可以提高查找效率,但是必须要保证该数组是有序的。
<span style="font-size:18px;"> public static int halfSearch(int[] arr,int num){
int min=0,mid,max=arr.length-1;
while(min<=max){
mid=(max+min)>>1;
if(num>arr[mid]){
min=mid+1;
}elseif(num<arr[mid]){
max=mid-1;
}else
return mid;
}
return -1;
}
</span>
3.二维数组
二维数组是指数组中的数组,即把数组作为元素存入到另一个数组当中。
I.格式有:
格式1:int[][] arr = new int[3][2];
注意:定义了名称为arr的二维数组
二维数组中有3个一维数组
每一个一维数组中有2个元素
一维数组的名称分别为arr[0], arr[1], arr[2]
给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
格式2:int[][] arr = new int[3][];
注意:二维数组中有3个一维数组
每个一维数组都是默认初始化值null
可以对这个三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1]= new int[1];
arr[2]= new int[2];
格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
注意:定义一个名称为arr的二维数组
二维数组中的有三个一维数组
每一个一维数组中具体元素也都已初始化
第一个一维数组arr[0] = {3,8,2};
第二个一维数组arr[1] = {2,7};
第三个一维数组arr[2] = {9,0,1,6};
第三个一维数组的长度表示方式:arr[2].length;
II.二维数组的遍历
<span style="font-size:18px;"> public static void bianli(int[][] arr){
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+",");
}
}
}</span>
注意:二维数组的实质还是一维数组,只是其数组元素是指向一维数组的引用。
------- android培训、java培训、期待与您交流! ----------