黑马程序员——数组

来源:互联网 发布:森田玻尿酸乳液知乎 编辑:程序博客网 时间:2024/06/01 09:24

------- android培训java培训、期待与您交流! ----------

数组

       所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。
       下面从几个方面来介绍数组:
1、数组的定义;
2、数组的内存分配及特点;
3、数组常见的操作;
4、数组中的数组。
       数组的定义:数组就是同一种数据的集合,可以简单的看做一个容器。我们知道容器有很多种,存放不同的物体。那么顾名思义,数组中存放的数据类型因数组名的不同而不同,而存放在同一个数组中的数据必定是同一个类型的。数组能自动给数组中的元素从0开始标号,以便操作这些元素。

  • 1、数组的定义:同一个数据类型的集合,可以看做一个容器。

数组的好处:自动编号,从0开始。方便操作。

格式一 数组的定义:元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

//需求:定义一个可以存储三个数据的容器。

int [] x= new int[3];//“[]”:数组标识;“new”:用来在内存中产生一个容器实体;“x”:数据类型为数组类型。

Java一共在内存中划分了5片空间:栈内存;堆内存;方法区;本地方法区;寄存器。
  • 栈内存:数据使用完毕,自动释放空间。
  • 堆内存:
特点:1、堆内存中的每个实体都有一个内放位置(地址值从0开始,也就是下标)。地址值存放到栈内存中,数据实体存放在堆内存中。
           2、堆内存中的实体都有默认初始化值,依数据类型而定:int,0; double,0.0; float,0.0f; boolean,false;……
如x[0]=59:“0”表下标,“59”表对应于0这个小标地址空间中的实体数据。

格式二 数组的定义:元素类型[] 数组名 = new 元素类型 [] {元素,元素,……};//直接确定数组里的值。

定义数组的格式:格式一:元素类型 [ ] 数组名=new 元素类型 [元素个数或者数组长度];
示例:int [ ] arr=new int [ 8 ];
             格式二:元素类型 [ ] 数组名=new 元素类型 [ ] {元素,元素, …};
示例:int [ ] arr=new int [ ] {5,68,9,4,12};

  • 2、数组的内存分配:数组在内存中,栈内存存放地址,堆内存存放数据对象。
例如:int [ ] arr=new int[ 8 ];通过new产生的实体都存放于堆内存中,而实体所对应的地址值就存放于栈内存中。

  • 3、数组的常见操作:获取最值,排序,查找。
(1)、获取最值:即获取最大值和最小值。
  获取数组中的最值

方法一:
//函数功能实现public static int getMax(int [] arr){int max=arr[0];for (int x=1;x<arr.length;x++){if (arr[x]>max)max=arr[x];}return max;}//主函数public static void main(String[] rgs){int[] arr={1,2,3,3,1,5,56,-8};int max=getMax(arr);System.out.plintln("max="+max)}//注解:还可以通过数组中元素所对应的下标来进行比较。

方法二:
//函数功能实现public static int getMax_2(int [] arr){int max=0;for (int x=1;x<arr.length;x++){if (arr[x]>[max])max=x;}return arr[max];}//主函数public static void main(String[] rgs){int[] arr={1,2,3,3,1,5,56,-8};int max=getMax_2(arr);System.out.plintln("max="+max)}



(2)、 排序(两种):选择排序,冒泡排序。
选择排序:
class ArrayTest2{//功能实现:public static void selectSort(int [] arr){for(int x=0;x<arr.length-1;x++){for(int y=x+1;y<arr.length;y++){if(arr[x]>arr[y]){int temp=arr[x];arr[x]=arr[y];arr[y]=temp;}}}}public static void main(String[] args){int [] arr={1,2,3,5,6,4,79,5,7};//排序前打印:printArray(arr);//排序:selectSort(arr);排序后打印:printArray(arr);}//打印程序:public static void printArray(int [] arr){System.out.print("[");for(int x=0;x<arr.length;x++){if(x!=arr.length-1)System.out.print(arr[x]",");elseSystem.out.println(arr[x]+"]");}}}


选择排序特点:最值出现在头角标上。
冒泡排序:相邻的两个元素进行比较,如果符合条件进行换位。最值出现在最后一位。
冒泡排序功能代码段:
public static void main(int [] arr){for(int x=0;x<arr.length-1;x++){for(int y=0;y<arr.length-x-1;y++)//-x:让每次比较的元素较少,-1:避免交表越界。{if(arr[y]<arr[y+1]){int temp=arr[y];arr[y]=arr[y+1];arr[y+1]=temp;}}}}


(3)、查找:折半查找(二分查找)。
数组的查找操作:也就是在遍历的时候找到第一次出现目标元素并返回。
功能实现:
class ArrayTest4{public static void main(String[] args){int[] arr={3,4,6,7,8,7,5,4,1,2};int index=getIndex(arr,2);//查找2第一次在数组中出现的角标。System.ou.println("index="index);}}public static int getIndex(int [] arr;int key){for(int x=0;x<arr.length;x++){if(arr[x]==key)return x;}return -1;//表示数组中没有找到目标元素。}


折半查找(可以提高查找效率):数组必须是有序数组。
功能函数实现:
public static int halfSearch(int[] arr,int key){int min,max,mid;min=0;max=arr.length-1;mid=(min+max)/2;while(arr[mid]!=key){if(key>arr[]mid)min=mid+1;else if(key<arr[mid])max=mid-1;if(min>max)return -1;mid=(max+min)/2;}return mid;}


折半查找方式二:
class ArrayTest4{public static void main(String[] args){int[] arr={3,4,6,7,8,11,52,79};int index=getIndex(arr,11);//查找11第一次在数组中出现的角标。System.ou.println("index="index);}}public static inthalfSearch_2(int[] arr,int key){int min=0,max=array.length-1,mid;while(min<max){mid=(min+max)>>1;//“>>”表示右移,一个数右移n次就等于该数/(2的n次方)。if(key>arr[mid])min=mid+1;else if(key<arr[mid])max=mid-1;else return mid;}return -1;}


  • 4、数组中的数组(二维数组):
定义二维数组格式一:int [ ] [ ] arr =new int [ 5 ] [ 2 ]; 给定了二维数组的行列数。
定义二维数组格式二:int [ ] [ ] arr =new int [ 4 ] [    ]; 三个一维数组,每个一维数组默认初始化为null。
定义二维数组格式三:int [ ] [ ] arr ={ {7,6,8},{25,13,78},{4,15,63} };数组直接给出数据。

综上所述对于数组我们首先要了解数组的定义,以及它存在的意义,然后就是使用它,掌握数组常见的操作。

------- android培训java培训、期待与您交流! ----------



0 0
原创粉丝点击