Java中数组的定义和使用教程(三)
数组排序
在很多的面试题上都会出现数组排序的操作形式。但是这个时候你千万别写上:java.util.Arrays.sort(数组)。而这种排序都是以升序为主。
基础的排序操作:
范例:冒泡排序
publicclassArrayDemo{ publicstaticvoidmain(Stringargs[]){ intdata[]=newint[]{9,3,1,5,4,2,7,8,6,0}; sort(data); printArray(data); } publicstaticvoidsort(intarr[]){//实现数组排序 for(intx=0;xarr[y+1]){ inttemp=arr[y]; arr[y]=arr[y+1]; arr[y+1]=temp; } } } } //定义一个专门进行数组输出的方法 publicstaticvoidprintArray(inttemp[]){ for(inti=0;i 数组转置
所谓的转置最简单的理解就是首尾交换。而如果要想实现这样的交换有两种实现思路。
思路一:开辟一个新的等长的数组,而后将原始数组倒序保存进去;
publicclassArrayDemo{ publicstaticvoidmain(Stringargs[]){ intdata[]=newint[]{9,3,1,5,4,2,7,8,6,0}; data=reverse(data);//反转 printArray(data); } publicstaticint[]reverse(intarr[]){ inttemp[]=newint[arr.length]; intfoot=0; for(intx=arr.length-1;x>=0;x--){ temp[foot++]=arr[x]; } returntemp; } //定义一个专门进行数组输出的方法 publicstaticvoidprintArray(inttemp[]){ for(inti=0;i使用此类模式实现的最大问题在于开辟了两块相同的堆内存空间,所以造成空间浪费。
思路二:在一个数组上完成转换
publicclassArrayDemo{ publicstaticvoidmain(Stringargs[]){ intdata[]=newint[]{9,3,1,5,4,2,7,8,6,0}; reverse(data);//反转 printArray(data); } publicstaticvoidreverse(intarr[]){ intcenter=arr.length/2;//转换次数 inthead=0;//头部开始索引 inttail=arr.length-1;//尾部开始索引 for(intx=0;x这种转换只需要根据数组长度÷2即可。
如果要进行二维数组的原地转置,那么肯定有一个前提:行列要相等。
范例:保证中间轴不变(x=y)
publicclassArrayDemo{ publicstaticvoidmain(Stringargs[]){ intdata[][]=newint[][]{{1,2,3},{4,5,6},{7,8,9}}; reverse(data);//反转 printArray(data); } publicstaticvoidreverse(intarr[][]){ for(intx=0;x二分查找法
如果现在要求在一个指定的数组之中查询一个数据的位置,那么现在可能想到的最简化的实现,整体数组遍历。
范例:顺序查找
publicclassArrayDemo{ publicstaticvoidmain(Stringargs[]){ intdata[]=newint[]{1,2,3,4,5,6,7,8}; intsearch=7; System.out.println(index(data,search)); } publicstaticintindex(intarr[],intkey){ for(intx=0;x这个的时间复杂度是n,也就是说所有的数组中的数据都需要进行一次遍历,这样才能确认所需要查找的数据是否存在,那么现在如果想进行更快速地查找,最好的做法是进行二分查找(折半查找)。
范例:实现二分查找(采用递归)
publicclassArrayDemo{ publicstaticvoidmain(Stringargs[]){ intdata[]=newint[]{1,2,3,4,5,6,7,8}; intsearch=7; System.out.println(index(data,search)); } publicstaticintbinarySearch(intarr[],intfrom,intto,intkey){ if(fromarr[mid]){ returnbinarySearch(arr,mid+1,to,key); } } return-1; } } 但是这些都是属于数据结构课程的范围,是逻辑思维训练。
对象数组(核心)
在之前所定义的数组都属于基本数据类型数组,那么对象也可以将其定义为数组,这样的操作形式称为对象数组。对象数组往往是以引用数据类型为主的定义,例如:类、接口,而且对象数组也分为两种定义格式。
- 对象数组动态初始化:类名称对象数组名称[]=new类名称[长度];
- 对象数组静态初始化:类名称对象数组名称[]=new类名称[]{实例化对象,…};
范例:对象数组的动态初始化
classPerson{ privateStringname; privateintage; publicPerson(Stringn,inta){ name=n; age=a; } publicStringgetInfo(){ return"姓名:"+name+",年龄:"+age; } } publicclassArrayDemo{ //动态初始化之后对象数组中的每一个元素都是其对象数据类型的默认值 publicstaticvoidmain(Stringargs[]){ Personper[]=newPerson[3];//动态初始化 per[0]=newPerson("张三",1); per[1]=newPerson("王五",2); per[2]=newPerson("李四",4); for(intx=0;x范例:静态初始化
classPerson{ privateStringname; privateintage; publicPerson(Stringn,inta){ name=n; age=a; } publicStringgetInfo(){ return"姓名:"+name+",年龄:"+age; } } publicclassArrayDemo{ //动态初始化之后对象数组中的每一个元素都是其对象数据类型的默认值 publicstaticvoidmain(Stringargs[]){ Personper[]=newPerson[]{ newPerson("张三",1), newPerson("王五",2), newPerson("李四",4) };//动态初始化 for(intx=0;x每一个对象可以保存更多的的属性,所以对象数组保存的内容要比基本数据类型更多。那么应用的也就更多。所有的开发必定都存在有对象数组的概念。
总结
到此这篇关于Java中数组的定义和使用的文章就介绍到这了,更多相关Java数组的定义和使用内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!