java基础二(数组)
2013-06-14 21:46
190 查看
数组
概念:同一种类型数据的集合,其实数组就是一个容器。
角标:数组自动给内部的元素编号,从0开始。
格式:
元素类型[] 数组名 =new 元素类型[元素个数];
元素类型[] 数组名 = new 元素类型[]{元素,元素,....} 简化为:元素类型[] 数组名 = {元素,元素.....}
一些类型有默认是:int:0;double:0.0,float:0.0f,boolean:false;
数组是作为实体存在的一个容器,存放在堆内存当中;而数组名是一个引用型变量仅仅指向这个容器而已。
数组属性:length,可以直接获取元素个数。
数组的操作
遍历:获取数组中的元素
求最值:
排序:
折半查找:(数组必须是有序的)
概念:同一种类型数据的集合,其实数组就是一个容器。
角标:数组自动给内部的元素编号,从0开始。
格式:
元素类型[] 数组名 =new 元素类型[元素个数];
元素类型[] 数组名 = new 元素类型[]{元素,元素,....} 简化为:元素类型[] 数组名 = {元素,元素.....}
一些类型有默认是:int:0;double:0.0,float:0.0f,boolean:false;
数组是作为实体存在的一个容器,存放在堆内存当中;而数组名是一个引用型变量仅仅指向这个容器而已。
数组属性:length,可以直接获取元素个数。
数组的操作
遍历:获取数组中的元素
int[] arr ={3,6,5,1,8,9,6,7}; for(int x=0;x<arr.length;x++) { //打印出数组中的元素,并以逗号隔开 System.out.print(arr[x]+","); }
求最值:
获取最大值思路: 1,获取最值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。 通过一个变量进行临储。 2,让数组中的每一个元素都和这个变量中的值进行比较。 如果大于了变量的值,就用该变量记录较大值。 3,当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了。 步骤: 1,定义变量,把数组中任意一个值赋给这个变量。 2,通过循环语句对数组进行遍历。 3,在变量过程中定义判断条件,如果遍历到的元素比变量的元素打,就赋值给该变量; 需要定义一个功能来完成。以便提高复用性。 1,明确结果,数组中的最大元素,类型为int。 2未知内容:一个数组。int[] 元素的值比较 */ public static int bijiao(int[] maxin) { int z = maxin[0];//直接把数组中角标为0的元素的值赋给变量z for(int x = 1 ;x<maxin.length;x++) { //x=1,所以是用角标1的值和角标0的值比较大小 //比较后把最大的值赋给z。 if(maxin[x] > z)//那>换成<就是最小值 z = maxin[x]; } return z;//最后比较后的结果。 } //--------------------------------------------------------------------- /* 另一种思路: 把变量作为数组中的角标来赋值。 通过角标来比较,把角标的位置赋值给变量,而不是元素的值。 */ public static int bijiao2(int[] maxin) { int z = 0;//0作为数组中一个角标。 for(int x = 1 ;x<maxin.length;x++) { if(maxin[x] > maxin[z])//判断数组中两个角标的值 z = x;//把值的角标赋值 } return maxin[z];//最后比较后的结果。 }
排序:
class shuzup { //这两种排序性能低,效率低,代码简单。 //目的:1.明白排序的算法。2.应付面试。 //选择排序: //依次从0角标和后面的所有元素比较,跟着到角标1和后面的所有元素比较,角标2... //内循环结束一次,最值出现在头角标位置上。 public static void paixu(int[] dx) { for(int x = 0;x<dx.length-1;x++)//z<dx.length-1:循环到最后一个角标时不用比较,所以-1 { for(int y=x+1;y<dx.length;y++) { //dx[x]>dx[y]是从小到大排序,dx[x]<dx[y]从大到小排序 if(dx[x]>dx[y])//不要加分号,不然后面三条语句不再归在if语句内。 { //用第三方变量交换位置,不能直接赋值 int temp = dx[x]; dx[x] = dx[y]; dx[y] = temp; //huanwei(arr,y,x)//利用函数 } } } } //------------------------------------------------------------------- /* 冒泡排序:就是相邻两个元素比较大小,如果符合条件换位。 */ public static void paixu2(int[] arr) { /* 另一种冒泡: for(int x = arr.length;x>0;x--) for(int y =0;y<x;y++) */ for(int x=0,;x<arr.lenth-1;x++,) { for(int y=0;y<arr.lenth-x-1;y++) //内循环排序以后,最值换到最后一位,没必要再参与整个数组的相邻比较。 //所以要-x:让数组长度随着排序次数的递增而递减。 //-1:避免角标[y+1]位置越界。 { if(arr[y]>arr[y+1])//从小到大排序。 { //用第三方变量交换位置,不能直接赋值 int temp = arr[y]; arr[y] = arr[y+1]; arr[y+1] = temp; //huanwei(arr,y,y+1)//利用函数 } } } //-------------------------------------------------------------- //利用函数封装换位置功能 //发现无论什么排序都需要对满足条件的元素进行位置置换。 //所以可以把这部分相同的代码提取出来,单独封装成一个函数 public static void huanwei(int[] arr,int a,int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } public static void shuzu(int[] arr) { {System.out.print("[");//让打印美观一点 for(int x=0;x<arr.length;x++) { if(x!=arr.length-1)//条件是表示判断角标位置是不是最后一个 {System.out.print(arr[x]+", ");}//打印出数组中的元素,并以逗号隔开 else {System.out.println(arr[x]+"]");}//角标为最后一个时的输出 } } } public static void main(String[] args) { int[] dx = {5,1,6,4,2,8,9}; //排序前打印数组 shuzu(dx); //排序 //Arrays.sort(dx);//java定义好的一种排序方式。开发中,对数组进行排序,要使用该句代码。 paixu(dx); //排序后打印数组 shuzu(dx); } }
折半查找:(数组必须是有序的)
class shuzucz { public static void main(String[] arge) { int[] sz = {23,45,234,654,765,3230}; int x = zheban(sz,4); System.out.println("index="+x); } //折半查找:提高效率,但是必须要保证该数组是有序的数组。 public static int zheban(int[] arr,int key) { int min,max,mid; min = 0; max = arr.length-1; mid=(min+max)/2;//中间值 while(key!=arr[mid]) { //判断用key和中间值比较 if(key>arr[mid]) min = mid+1;//key比中间值大,所以查找从角标0移到中间+1位的位置 else if (key<arr[mid]) max = mid-1;//key比中间值小,所以查找从角标最后一位,移动到中间-1位的位置 mid =(max+min)/2;//每次循环都折半一次。 if(min>max)//每次折半后,当最小角标位移动超过最大角标位,或者最大角标位移动超过最小角标位时,表示数组查找完。没有要查找的元素。 return -1; } return mid;//key等于中间值 } //------------------------------------------------------------------ //在一个有序的数组中插入一个数,还要保证这个数组是有序的。 public static int zheban2(int[] arr,int key) { int min,max,mid; min = 0; max = arr.length-1; while(min<=max) { mid =(min+max)>>1//每次循环都折半一次。 if(key>arr[mid]) min = mid+1;//key比中间值大,所以查找从角标0移到中间+1位的位置 else if (key<arr[mid]) max = mid-1;//key比中间值小,所以查找从角标最后一位,移动到中间-1位的位置 else return mid;//key等于中间值 } return min;//返回最小角标的值,这个就是插入的位置。 //------------------------------------------------------------------ //折半查找:另外一种 public static int zheban2(int[] arr,int key) { int min,max,mid; min = 0; max = arr.length-1; while(min<=max) { mid =(min+max)>>1//每次循环都折半一次。 if(key>arr[mid]) min = mid+1;//key比中间值大,所以查找从角标0移到中间+1位的位置 else if (key<arr[mid]) max = mid-1;//key比中间值小,所以查找从角标最后一位,移动到中间-1位的位置 else return mid;//key等于中间值 } return -1; } //------------------------------------------------------------------ //插入位置 public static int zheban2(int[] arr,int key) int min,max,mid; min = 0; max = arr.length-1; while //------------------------------------------------------------------ //定义功能,获取key第一次出现在数组中的位置。 public static int chazhao(int[] arr,int key) { for(int x =0;x<arr.length;x++) { if(arr[x]==key) return x; } return -1;//由于角标位都是从0开始,都是整数,所以返回-1表示没找到。 } }
相关文章推荐
- Java基础学习总结(67)——Java接口API中使用数组的缺陷
- Java基础语法(三)(流程控制和数组)
- Java基础(2)变量,循环,数组,方法。。。。。。
- 黑马程序员——高新技术---Java基础-常用类-排序,Arrays高级数组,Integer类
- Java基础总结 - 数组
- java基础5 (一维)数组和二维数组
- java基础知识4--数组的常用方法(Array)
- java-基础入门-泛型数组列表-解决运行时动态更改数组的问题
- java基础案例:在数组中查找指定元素
- Java 语言基础之数组(一)
- 黑马程序员——Java语言基础:程序流程控制、函数、数组
- java基础 数组及数组排序方法
- Java基础语法---数组
- java基础知识之循环结构与数组
- java基础学习_常用类03_StringBuffer类、数组高级和Arrays类、Integer类和Character类_day13总结
- 黑马程序员_ Java基础(函数,数组)
- Java基础课程-数组-反射机制
- java基础入门之数组循环初始化
- java基础入门之数组排序冒泡法
- 数组的定义--Java基础027