第四章Java常用数据结构PPT文档格式.ppt
《第四章Java常用数据结构PPT文档格式.ppt》由会员分享,可在线阅读,更多相关《第四章Java常用数据结构PPT文档格式.ppt(128页珍藏版)》请在冰豆网上搜索。
其中类型(type)可以为Java中任意的数据类型,包括基本类型和类类型,数组名arrayName为一个合法的标识符,指明该变量是一个数组类型变量。
例如:
intintArray;
声明了一个整型数组,数组中的每个元素为整型数据。
我们还可以定义一个类类型的数组,例如:
DatedateArray;
声明了一个容纳复合数据类型Date的数组。
定义与C、C+不同,Java在数组的定义中并不为数组元素分配内存,因此中不用指出数组中元素的个数,即数组长度,而且对于如上定义的一个数组是不能访问它的任何元素的。
必须经过初始化后,才能应用数组的元素。
除了这种定义数组的方式之外,java语言还提供了其他的定义形式,如下所示:
定义对于以上举出的例子,我们也可以这样定义:
DatedateArray;
一维数组定义之后,一维数组定义之后,必须经过初始化才可以引用必须经过初始化才可以引用。
数组的。
数组的初始化分为静态初始化和动态初始化两种:
初始化分为静态初始化和动态初始化两种:
初始化一维数组:
初始化静态初始化:
静态初始化:
在定义数组的同时对数组元素进行初在定义数组的同时对数组元素进行初始化,例如:
始化,例如:
intintArray=1,2,3,4;
/定义了一个含有定义了一个含有4个个/元素的元素的int型数组。
型数组。
动态初始化:
使用运算符使用运算符new为数组分配空间,对于简为数组分配空间,对于简单类型的数组,其格式如下:
单类型的数组,其格式如下:
typearrayName=newtypearraySize;
初始化对于复合类型的数组,需要经过两步空间分配。
对于复合类型的数组,需要经过两步空间分配。
首先:
然后:
arrayName0=newtype(paramList);
arrayNamearraySize-1=newtype(paramList);
StringstringArrar;
/定义一个定义一个String类型的数组类型的数组stringArray=newString3;
/给数组给数组stringArray分配分配3个应用空间,初始化每个引用值为个应用空间,初始化每个引用值为nullstringArray0=newString(“how”);
stringArray1=newString(“are”);
stringArray2=newString(“you”);
初始化各数组元素1、数组数组一维数组:
初始化当定义了一个数组,并用运算符当定义了一个数组,并用运算符new为它分配了内存为它分配了内存空间后,就可以引用数组中的每一个元素了。
元素的空间后,就可以引用数组中的每一个元素了。
元素的引用方式为:
引用方式为:
arrayNameindex1、数组数组一维数组:
引用一维数组:
引用index为为数组下标,可以是整型常数或表达式,如:
数组下标,可以是整型常数或表达式,如:
arrayName1,arrayNamei,arrayName6*i等。
下标是等。
下标是0序的,即序的,即从从0开始开始,一直到数组长度减,一直到数组长度减1。
另外,与另外,与C、C+中不同,中不同,Java对数组元素要对数组元素要进行越界检查以保证安全性。
同时,对于每个数进行越界检查以保证安全性。
同时,对于每个数组都有一个属性组都有一个属性length指明它的长度指明它的长度,例如,例如:
intArray.length指明数组指明数组intArray的长度的长度例:
模拟抽彩游戏模拟抽彩游戏1、数组数组一维数组:
边界检查一维数组:
边界检查PublicclassLotteryDrawing/模拟抽彩游戏模拟抽彩游戏publicstaticvoidmain(Stringargs)Stringinput=JOptionPane.showInputDialog(Howmanynumbersdoyouneedtodraw?
);
intk=Integer.parseInt(input);
input=JOptionPane.showInputDialog(Whatisthehighestnumberyoucandraw?
intn=Integer.parseInt(input);
/numbers用来存放123.nintnumbers=newintn;
for(inti=0;
inumbers.length;
i+)numbersi=i+1;
/result用不存放选取出的数intresult=newintk;
iresult.length;
i+)/在0-N-1之间产生选取出的数intr=(int)(Math.random()*n);
n/将选出的数放入resultnresulti=numbersr;
n/movethelastelementintotherandomlocationnnumbersr=numbersn-1;
nn-;
n/将result排序输出nArrays.sort(result);
nSystem.out.printlnn(Betthefollowingcombination.Itllmakeyourich!
nfor(inti=0;
i+)nSystem.out.println(resulti);
nSystem.exit(0);
在任何语言中,多维数组都被看作数组的数组。
比如二维数组是一个特殊的一维数组,其每一个元素又是一个一维数组。
我们主要以二维数组为例来说明,高维数组与此类似。
1、数组数组多维数组多维数组二维数组的定义方式typearrayName;
1、数组数组二维数组:
定义二维数组:
定义也可以采用另一种定义方式:
typearrayName;
与一维数组一样,这时对数组元素也没有分配内存空间,同样要使用运算符new来分配内存,然后才可以访问每个元素。
二维数组的初始化也分为静态和动态两种。
在定义数组的同时为数组分配空间。
intintArray=1,2,2,3,3,4;
不必指出数组每一维的大小,系统会根据初始化时给出的初始值的个数自动算出数组每一维的大小。
初始化二维数组:
初始化动态初始化:
对高维数组来说,分配内存空间有下面两种方法:
1.直接为每一维分配空间,如:
typearrayName=newtypearraylength1arraylength2例如:
inta=newint23;
初始化2.从最高维开始(而且必须从最高维开始),分别为每一维分配空间,如:
Strings=newString2;
s0=newString2;
s1=newString3;
s00=newString(“Good”);
s01=newString(“Luck”);
s10=newString(“to”);
s11=newString(“you”);
s12=newString(“!
”);
初始化二维数组的引用二维数组的引用对二维数组中每个元素,引用方式为对二维数组中每个元素,引用方式为:
arrayNameindex1index2其中其中index1和和index2为为数组下标,为整型常数和表数组下标,为整型常数和表达式,都达式,都是是0序的序的。
引用及示例二维数组:
引用及示例n数组是用来表达一组同类型数据的数据结构1、数组数组java.util.Arraysn在Java中数组是定长的,数组的大小不会动态变化n数组变量的值是数组对象实例的引用n在java.util包中的Arrays类提供了一些操作数组的方法n在java.util包中的Vector提供了动态变长数组的功能,Vector的容量可以随着需要变化nintbinarySearch(typea,typekey)n数组a必须已经排序,否则返回值无意义n当数组a中有重复的值时,该方法返回的值不确定n如果key存在,则返回它在数组a中的位置n如果不存在,则返回它的“-(插入位置-1)”nvoidfill(typea,typeval)voidfill(typea,intfromIndx,inttoIndex,typeval)n包括afromIndx,但不包括atoIndexnfromIndx=toIndex时,范围是一个空的范围1、数组数组java.util.Arraysnbooleanequals(typea,typea2)n两个数组大小相同,并且每一个元素相等n两个null数组是相等的1、数组数组java.util.Arraysnvoidsort(typea)voidsort(typea,intfromIndx,inttoIndex)voidsort(typea,Comparatorc)voidsort(typea,intfromIndx,inttoIndex,Comparatorc)n包括afromIndx,但不包括atoIndexnfromIndx=toIndex时,范围是一个空的范围n排序算法都具有n*log(n)的计算复杂性,效率高n排序算法都保证稳定,即排序算法不会改变相等元素的顺序n对不同类型的数组,算法的实现并不完全相同n可以用自己的Comparator对象声明自定义的顺序1、数组数组java.util.Arraysnjava.lang.Systemnvoidarraycopy(Objectsrc,intsrc_position,Objectdst,intdst_position,intlength)n范围不能越界n可对任何同类型的数组进行复制n数组复制过程中做严格的类型检查数组复制过程中做严格的类型检查n更详细的内容参见JDK文档1、数组数组数组的复制数组的复制向量向量(Vector)是是java.util类包提供的一个工具类。
它类包提供的一个工具类。
它对应于类似数组的顺序存储的数据结构,但是具有比数组对应于类似数组的顺序存储的数据结构,但是具有比数组更强大的功能。
更强大的功能。
它是允许不同类型元素共存的变长数组它是允许不同类型元素共存的变长数组。
每个每个Vector类的对象可以表达一个完整的数据序列。
类的对象可以表达一个完整的数据序列。
Vector类的对象不但可以保存顺序的一列数据,而且还提类的对象不但可以保存顺序的一列数据,而且还提供了许多有用的方法来操作和处理这些数据。
供了许多有用的方法来操作和处理这些数据。
另外,另外,Vector类对象所表达的序列中元素的个数是可类对象所表达的序列中元素的个数是可变的,即变的,即Vector实现