版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)組和向量arraysandvectors第四章目錄0102
數(shù)組
向量0101
數(shù)組4.1數(shù)組4.1.1創(chuàng)建數(shù)組在Java中,創(chuàng)建數(shù)組需要進(jìn)行定義和初始化兩個(gè)步驟。在定義一個(gè)數(shù)組后,只是聲明了一個(gè)變量來(lái)引用數(shù)組,此時(shí)并沒(méi)有為數(shù)組分配任何內(nèi)存空間,因此不能夠直接訪問(wèn)數(shù)組的元素。為了能夠正確使用數(shù)組,需要對(duì)其進(jìn)行初始化。在初始化過(guò)程中,需要為數(shù)組分配內(nèi)存空間,并為數(shù)組的每個(gè)元素賦予初始值。在Java中,可以在定義數(shù)組時(shí)進(jìn)行初始化,也可以在稍后的代碼中進(jìn)行初始化。與C語(yǔ)言不同,Java中的數(shù)組定義時(shí)不需要在方括號(hào)中指定數(shù)組的大小,這是因?yàn)镴ava會(huì)根據(jù)初始化時(shí)提供的元素?cái)?shù)量自動(dòng)推斷數(shù)組的大小。此外,方括號(hào)可以放在數(shù)組名的左邊或右邊,這取決于個(gè)人的編碼風(fēng)格。例如,以下兩種寫(xiě)法都是合法的:int[]numbers=newint[5];//方括號(hào)在數(shù)組名的右邊intnumbers[]=newint[5];//方括號(hào)在數(shù)組名的左邊4.1數(shù)組數(shù)組的初始化包括靜態(tài)初始化和動(dòng)態(tài)初始化,靜態(tài)初始化就是在創(chuàng)建時(shí)直接放入數(shù)據(jù),動(dòng)態(tài)初始化則是在創(chuàng)建時(shí)指明動(dòng)態(tài)初始化下面是一些通過(guò)靜態(tài)初始化正確創(chuàng)建數(shù)組的示例。//創(chuàng)建一個(gè)int類(lèi)型的數(shù)組int[]intArray={1,2,3,4,5};//創(chuàng)建一個(gè)String類(lèi)型的數(shù)組String[]stringArray={"Hello","World","Java","is","fun"};//創(chuàng)建一個(gè)float類(lèi)型的數(shù)組float[]floatArray={1.1f,2.2f,3.3f,4.4f,5.5f};4.1數(shù)組//創(chuàng)建一個(gè)boolean類(lèi)型的數(shù)組booleanbooleanArray[]={true,false,true,false,true};//創(chuàng)建一個(gè)byte類(lèi)型的數(shù)組bytebyteArray[]={1,2,3,4,5};動(dòng)態(tài)初始化只指定數(shù)組長(zhǎng)度,由系統(tǒng)為數(shù)組初始分配值。格式為數(shù)組類(lèi)[]數(shù)組名=new數(shù)據(jù)類(lèi)型[數(shù)組長(zhǎng)度],下面是一個(gè)通過(guò)動(dòng)態(tài)初始化數(shù)組的范例:int[]arr=newint[3];對(duì)于引用類(lèi)型的數(shù)組,動(dòng)態(tài)初始化后,數(shù)組中的每個(gè)元素默認(rèn)值是null,表示沒(méi)有引用任何對(duì)象。如果想要使用這些元素,必須手動(dòng)創(chuàng)建(實(shí)例化)對(duì)象并賦值給對(duì)應(yīng)的數(shù)組元素。4.1數(shù)組例如:String[]arr=newString[5];//默認(rèn)初始化為null//必須逐一創(chuàng)建數(shù)組里的對(duì)象arr[0]=newString("Hello");arr[1]=newString("World");上述代碼創(chuàng)建了一個(gè)長(zhǎng)度為5的String類(lèi)型的數(shù)組,然后逐個(gè)創(chuàng)建String對(duì)象并賦值給數(shù)組的元素。Java中數(shù)組的動(dòng)態(tài)初始化會(huì)根據(jù)數(shù)組的類(lèi)型給數(shù)組元素賦上默認(rèn)值。以下是不同類(lèi)型數(shù)組動(dòng)態(tài)初始化后的默認(rèn)值:4.1數(shù)組//整型數(shù)組(如int[],byte[],short[],long[]):默認(rèn)值為0int[]intArray=newint[5];//{0,0,0,0,0}//浮點(diǎn)型數(shù)組(如float[],double[]):默認(rèn)值為0.0。double[]doubleArray=newdouble[5];//{0.0,0.0,0.0,0.0,0.0}//字符型數(shù)組(char[]):默認(rèn)值為'\0'(空字符)。char[]charArray=newchar[5];//{'\0','\0','\0','\0','\0'}//布爾型數(shù)組(boolean[]):默認(rèn)值為false。boolean[]boolArray=newboolean[5];//{false,false,false,false,false}引用類(lèi)型數(shù)組(如String[],Object[],自定義類(lèi)數(shù)組等):默認(rèn)值為null。String[]strArray=newString[5];//{null,null,null,null,null}4.1數(shù)組以上就是Java中不同類(lèi)型數(shù)組動(dòng)態(tài)初始化后的默認(rèn)值。如果訪問(wèn)一個(gè)還沒(méi)有引用任何對(duì)象的數(shù)組元素(即值為null的元素),Java會(huì)打印出該數(shù)組類(lèi)型的對(duì)應(yīng)值。所以,對(duì)于引用類(lèi)型的數(shù)組,動(dòng)態(tài)初始化后需要逐一創(chuàng)建數(shù)組里的對(duì)象才能訪問(wèn)出想要的數(shù)據(jù)。當(dāng)在編碼時(shí)已經(jīng)知道數(shù)組的具體內(nèi)容,也就是能夠明確指定每個(gè)元素的值時(shí),應(yīng)該使用靜態(tài)初始化。當(dāng)在編碼時(shí)只知道數(shù)組的大小,但不知道具體的內(nèi)容,或者內(nèi)容需要在運(yùn)行時(shí)計(jì)算得出時(shí),應(yīng)該使用動(dòng)態(tài)初始化。值得注意的是,在Java中不能在定義時(shí)指明數(shù)組大小,例如下面所示的代碼是錯(cuò)誤的。floatarray[5];4.1.2訪問(wèn)數(shù)組初學(xué)者在學(xué)習(xí)數(shù)組的訪問(wèn)之前想要打印數(shù)組時(shí)大概率會(huì)寫(xiě)出類(lèi)似于下面的代碼。String[]array2={"lisi","zhangsan"};System.out.println(array2);然而令人失望的是,這段代碼打印出的結(jié)果為[LJava.lang.String;@5caf905d,并不是數(shù)組里的元素,而是數(shù)組的地址,所以這種訪問(wèn)方式是行不通的。在Java中,數(shù)組中的每個(gè)元素都有一個(gè)與之關(guān)聯(lián)的索引,用于標(biāo)識(shí)其在數(shù)組中的位置。在Java中可以通過(guò)索引訪問(wèn)數(shù)組中的元素,索引是從0開(kāi)始的,所以數(shù)組中的第一個(gè)元素的索引是0,第二個(gè)元素的索引是1,以此類(lèi)推。例如,如果有一個(gè)名為arr的數(shù)組,可以通過(guò)arr[0]訪問(wèn)第一個(gè)元素,通過(guò)arr[1]訪問(wèn)第二個(gè)元素,等等。4.1數(shù)組4.1數(shù)組int[]arr={1,2,3,4,5};intfirstElement=arr[0];//firstElement現(xiàn)在是1intsecondElement=arr[1];//secondElement現(xiàn)在是2需要注意的是,數(shù)組的元素必須進(jìn)行初始化后才能訪問(wèn),但遺憾的是,編譯器在訪問(wèn)數(shù)組時(shí)并不能檢測(cè)出要訪問(wèn)的元素是否進(jìn)行了初始化,所以需要程序員在使用數(shù)組時(shí)要格外小心。遍歷是編程中的一個(gè)基本概念,它指的是訪問(wèn)一個(gè)集合中的每個(gè)元素,并對(duì)其執(zhí)行某種操作。在Java中,通常使用for循環(huán)或者for-each循環(huán)來(lái)遍歷數(shù)組。4.1數(shù)組1.使用for循環(huán)遍歷數(shù)組int[]arr={1,2,3,4,5};for(inti=0;i<arr.length;i++){System.out.println(arr[i]);}在這個(gè)例子中,i是循環(huán)變量,代表當(dāng)前元素的索引。arr.length是數(shù)組的長(zhǎng)度,也就是數(shù)組中元素的數(shù)量。arr[i]則是使用索引i訪問(wèn)數(shù)組中的元素。在遍歷時(shí),除了手動(dòng)打出代碼,也可以使用數(shù)組的fori方法來(lái)自動(dòng)生成遍歷數(shù)組的代碼。4.1
數(shù)組1.使用for-each循環(huán)遍歷數(shù)組int[]arr={1,2,3,4,5};for(intnum:arr){System.out.println(num);}在這個(gè)例子中,num是每次循環(huán)時(shí)從數(shù)組中取出的元素。for-each循環(huán)會(huì)自動(dòng)遍歷數(shù)組中的每個(gè)元素,無(wú)需手動(dòng)處理索引。需要注意的是,如果試圖訪問(wèn)一個(gè)不存在的索引(例如,索引大于等于數(shù)組長(zhǎng)度的值),Java會(huì)拋出一個(gè)ArrayIndexOutOfBoundsException異常。4.1
數(shù)組下面的例子定義了一個(gè)數(shù)組,存儲(chǔ)1到10這10個(gè)整數(shù),統(tǒng)計(jì)數(shù)組里面一共有幾個(gè)數(shù)字能被3整除。publicclassmain{publicstaticvoidmain(String[]args){//定義一個(gè)數(shù)組,存儲(chǔ)1到10這10個(gè)整數(shù)int[]arr={1,2,3,4,5,6,7,8,9,10};//初始化計(jì)數(shù)器intcount=0;//遍歷數(shù)組for(intnum:arr){
4.1
數(shù)組//檢查數(shù)字是否可以被3整除if(num%3==0){//如果可以被3整除,增加計(jì)數(shù)器count++;}}//輸出結(jié)果System.out.println("數(shù)組中能被3整除的數(shù)字有"+count+"個(gè)");}}4.1
數(shù)組4.1.3二維數(shù)組在Java中可以創(chuàng)建和訪問(wèn)二維數(shù)組。二維數(shù)組可以看作是數(shù)組的數(shù)組,即每個(gè)元素都是一個(gè)數(shù)組。一.創(chuàng)建二維數(shù)組下面是創(chuàng)建二維數(shù)組的示例。1.靜態(tài)初始化:int[][]arr={{1,2,3},{4,5,6},{7,8,9}};int[][]arr={{1,2,3},{4,5},{7,8,9}};int[][]arr={1,2,3,4,5,6,7};前兩種創(chuàng)建方式是對(duì)的,由于Java中不存在實(shí)際的二維數(shù)組,其中的二維數(shù)組只是通過(guò)數(shù)組嵌套數(shù)組實(shí)現(xiàn)的,所以第三種初始化方式是不對(duì)的。4.1
數(shù)組2.動(dòng)態(tài)初始化:int[][]arr=newint[3][3];//創(chuàng)建一個(gè)3x3的二維數(shù)組或者int[][]arr=newint[3][];//創(chuàng)建一個(gè)有3個(gè)一維數(shù)組的二維數(shù)組(直角三角形),每個(gè)一維數(shù)組的長(zhǎng)度遞增arr[0]=newint[1];//指定第一個(gè)一維數(shù)組的長(zhǎng)度為1arr[1]=newint[2];//指定第二個(gè)一維數(shù)組的長(zhǎng)度為2arr[2]=newint[3];//指定第三個(gè)一維數(shù)組的長(zhǎng)度為3這段代碼等價(jià)于int[][]arr=newint[3][];for(inti=0;i<arr.length;i++){arr[i]=newint[i];}4.1
數(shù)組下面是一些錯(cuò)誤的二維數(shù)組的聲明:intarr[3][4];intarr[][]=newint[][3];intarr[3][4]=newint[3][4]第一行代碼:Java不允許在聲明數(shù)組時(shí)指定數(shù)組的大小。第二行代碼:在Java中,當(dāng)你創(chuàng)建一個(gè)二維數(shù)組時(shí),必須至少指定第一維的大小,不能只指定第二維的大小。正確的聲明和初始化方式應(yīng)該是int[][]arr=newint[3][];。然后,你可以為每個(gè)一維數(shù)組分配空間,如arr[0]=newint[4];。第三行代碼:和第一行代碼犯了相同的錯(cuò)誤,不能在聲明數(shù)組時(shí)指定數(shù)組的大小。4.1
數(shù)組二.訪問(wèn)和遍歷二維數(shù)組訪問(wèn)二維數(shù)組的元素需要兩個(gè)索引,第一個(gè)索引表示一維數(shù)組的位置,第二個(gè)索引表示在該一維數(shù)組中的位置。例如可以通過(guò)以下方式訪問(wèn)上述靜態(tài)初始化的二維數(shù)組的元素:int[][]={{1,2,3},{4,5,6},{7,8,9}};System.out.println(arr[0][0]);System.out.println(arr[1][2]);System.out.println(arr[2][1]);可以使用嵌套的for循環(huán)來(lái)遍歷該二維數(shù)組:for(inti=0;i<arr.length;i++){for(intj=0;j<arr[i].length;j++){4.1數(shù)組System.out.print(arr[i][j]+"");}System.out.println();//換行}打印結(jié)果為123456789System.out.print方法將傳入的參數(shù)輸出到控制臺(tái),但不會(huì)在輸出后添加換行符。這意味著如果你連續(xù)調(diào)用System.out.print,所有的輸出都會(huì)在同一行顯示。所以打印結(jié)果為一個(gè)3x3的矩陣。4.1
數(shù)組下面的例子創(chuàng)建了一個(gè)5x5的二維int數(shù)組,并計(jì)算了每一行中最大值和最小值之差,并找出了差值最大的那一行。publicclassmain{publicstaticvoidmain(String[]args){int[][]arr={{1,2,3,4,3},{5,6,7,2,9},{10,11,20,13,14},{15,16,17,13,19},{20,21,22,23,25}};intmaxDifference=Integer.MIN_VALUE;intmaxDiffRow=-1;4.1
數(shù)組for(inti=0;i<arr.length;i++){intminVal=arr[i][0];intmaxVal=arr[i][0];for(intj=1;j<arr[i].length;j++){if(arr[i][j]<minVal){minVal=arr[i][j];}if(arr[i][j]>maxVal){maxVal=arr[i][j];}}4.1
數(shù)組intdifference=maxVal-minVal;if(difference>maxDifference){maxDifference=difference;maxDiffRow=i;}}System.out.println("Therowwiththelargestdifferencebetweenthemaximumandminimumvaluesis:"+maxDiffRow);}}在這個(gè)程序中首先創(chuàng)建一個(gè)5x5的二維數(shù)組,然后遍歷每一行,找出每一行的最大值和最小值,并計(jì)算差值,如果這個(gè)差值大于之前找到的最大差值,就更新最大差值和對(duì)應(yīng)的行索引,最后打印出差值最大的那一行的索引。4.1
數(shù)組4.1.4復(fù)制數(shù)組數(shù)組一經(jīng)創(chuàng)建后其大小不可再被改變,但是可以使用這個(gè)數(shù)組的引用變量指向一個(gè)全新的數(shù)組。int[]array1={1,2,3};int[]array2={4,5,6};int[]array2=array1;array2[0]=10;System.out.println(array1[0]);在這段代碼中,array2指向了array1.這意味著array1和array3都是指向同一個(gè)數(shù)組的引用,并且如果沒(méi)有其他的引用指向array2原來(lái)指向的數(shù)組,那么array2原來(lái)指向的數(shù)組里的數(shù)據(jù)就丟失了(因?yàn)闊o(wú)法訪問(wèn)這個(gè)數(shù)組)。當(dāng)通過(guò)array3修改數(shù)組中的元素時(shí),實(shí)際上也修改了array1中的元素,因?yàn)樗鼈兌际侵赶蛲粋€(gè)數(shù)組的引用。所以,當(dāng)執(zhí)行array3[0]=10;這行代碼后,array1[0]的值也會(huì)變成10。因此,System.out.println(array1[0]);的輸出將會(huì)是10。4.1
數(shù)組在Java中,System.arraycopy()是一個(gè)內(nèi)建的方法,用于將源數(shù)組的內(nèi)容復(fù)制到目標(biāo)數(shù)組。這個(gè)方法非常高效,因?yàn)樗侵苯釉趦?nèi)存中進(jìn)行復(fù)制操作的。System.arraycopy()方法需要五個(gè)參數(shù):1.src:源數(shù)組,即要復(fù)制的數(shù)組。2.srcPos:源數(shù)組中的開(kāi)始位置(起始索引)。3.dest:目標(biāo)數(shù)組,即要將數(shù)據(jù)復(fù)制到的數(shù)組。4.destPos:目標(biāo)數(shù)組中的開(kāi)始位置(起始索引)。5.length:要復(fù)制的數(shù)組元素的數(shù)量。4.1
數(shù)組以下是一個(gè)具體的使用例子:int[]srcArray={1,2,3,4,5};int[]destArray=newint[5];System.arraycopy(srcArray,0,destArray,0,srcArray.length);在這個(gè)例子中首先創(chuàng)建了一個(gè)有5個(gè)元素的源數(shù)組srcArray。然后創(chuàng)建了一個(gè)新的、長(zhǎng)度為5的空數(shù)組destArray,最后使用了System.arraycopy()方法將srcArray的所有元素復(fù)制到destArray中。在這個(gè)操作之后,destArray將包含與srcArray相同的元素。注意,這是一個(gè)淺復(fù)制(shallowcopy),如果數(shù)組中的元素是引用類(lèi)型,那么復(fù)制的只是引用,而不是實(shí)際的對(duì)象。如果需要深復(fù)制(deepcopy),即復(fù)制實(shí)際的對(duì)象,那么需要采取其他的方法。4.1
數(shù)組【例4.1】開(kāi)發(fā)商務(wù)應(yīng)用在開(kāi)發(fā)一款電子商務(wù)應(yīng)用時(shí),程序員李亞坤遇到了一個(gè)問(wèn)題:他需要跟蹤每個(gè)商品的庫(kù)存量。商品包括書(shū)籍、電子設(shè)備、家用電器和玩具等類(lèi)別,每個(gè)類(lèi)別下又有許多不同的商品。請(qǐng)寫(xiě)一段代碼幫助他有效存儲(chǔ)和訪問(wèn)這些信息。引導(dǎo)chatgpt生成的自然語(yǔ)言如下:
編寫(xiě)一個(gè)Java程序,創(chuàng)建一個(gè)二維數(shù)組表示不同類(lèi)別的商品庫(kù)存,每個(gè)類(lèi)別是一個(gè)數(shù)組,每個(gè)數(shù)組中的元素是該類(lèi)別下的一個(gè)商品的庫(kù)存量,然后計(jì)算每個(gè)類(lèi)別的總庫(kù)存,并打印輸出。4.1
數(shù)組Chatgpt生成的代碼如下:publicclassmain{publicstaticvoidmain(String[]args){//創(chuàng)建一個(gè)二維數(shù)組,每個(gè)類(lèi)別是一個(gè)數(shù)組,每個(gè)數(shù)組中的元素是該類(lèi)別下的一個(gè)商品的庫(kù)存量int[][]stock={{150,200,250},//書(shū)籍庫(kù)存{100,120,140},//電子設(shè)備庫(kù)存{300,350,400},//家用電器庫(kù)存{500,550,600}//玩具庫(kù)存};4.1
數(shù)組//計(jì)算每個(gè)類(lèi)別的總庫(kù)存for(inti=0;i<stock.length;i++){intcategoryTotal=0;for(intj=0;j<stock[i].length;j++){categoryTotal+=stock[i][j];}System.out.println("Category"+(i+1)+"totalstock:"+categoryTotal);}}}4.1
數(shù)組在例4.1中定義了一個(gè)二維數(shù)組stock,其中每個(gè)一維數(shù)組代表一種類(lèi)別的商品,數(shù)組中的元素表示該類(lèi)別下每個(gè)商品的庫(kù)存量。然后通過(guò)兩層嵌套的for循環(huán)遍歷這個(gè)二維數(shù)組,計(jì)算出每個(gè)類(lèi)別的總庫(kù)存。內(nèi)層循環(huán)負(fù)責(zé)累加一個(gè)類(lèi)別內(nèi)所有商品的庫(kù)存,外層循環(huán)則遍歷所有類(lèi)別。最后,代碼將每個(gè)類(lèi)別的總庫(kù)存通過(guò)System.out.println打印輸出。4.1
數(shù)組例4.2曾經(jīng)有一個(gè)小村莊,村莊里的居民們都非常喜歡種植花朵。他們每天都會(huì)花費(fèi)大量的時(shí)間和精力來(lái)照料自己的花園,希望能培育出最美麗的花朵。然而,村莊的居民們對(duì)花朵的顏色有著不同的偏好。有的人喜歡紅色的玫瑰,有的人喜歡藍(lán)色的風(fēng)信子,還有的人喜歡黃色的向日葵。為了更好地了解村莊居民對(duì)花朵的喜好,村長(zhǎng)決定進(jìn)行一次調(diào)查:他要求每個(gè)居民在自己的花園里種植一種花朵,并記錄下自己種植的花朵顏色。請(qǐng)編寫(xiě)一個(gè)Java程序幫助村長(zhǎng)統(tǒng)計(jì)出每種花朵顏色的居民數(shù)量。引導(dǎo)chatgpt生成的自然語(yǔ)言如下:編寫(xiě)一個(gè)Java程序,統(tǒng)計(jì)給定居民對(duì)花朵顏色的喜好,輸出每種花朵顏色的居民數(shù)量。使用二維數(shù)組flowerPreferences記錄居民的喜好,其中true表示喜歡,false表示不喜歡。通過(guò)遍歷數(shù)組并計(jì)數(shù),統(tǒng)計(jì)每種花朵顏色的居民數(shù)量,并輸出結(jié)果。4.1
數(shù)組Chatgpt給出的代碼如下:publicclassFlowerPreference{publicstaticvoidmain(String[]args){//創(chuàng)建一個(gè)二維數(shù)組來(lái)記錄居民對(duì)花朵顏色的喜好boolean[][]flowerPreferences={{true,false,true},//第一個(gè)居民喜歡紅色和黃色的花朵{false,true,false},//第二個(gè)居民喜歡藍(lán)色的花朵{true,true,false},//第三個(gè)居民喜歡紅色、藍(lán)色的花朵{false,false,true}//第四個(gè)居民喜歡黃色的花朵};4.1
數(shù)組//統(tǒng)計(jì)每種花朵顏色的居民數(shù)量int[]colorCounts=newint[3];//三種花朵顏色for(inti=0;i<flowerPreferences.length;i++){for(intj=0;j<flowerPreferences[i].length;j++){if(flowerPreferences[i][j]){colorCounts[j]++;}}}4.1
數(shù)組
//輸出每種花朵顏色的居民數(shù)量System.out.println("紅色花朵的居民數(shù)量:"+colorCounts[0]);System.out.println("藍(lán)色花朵的居民數(shù)量:"+colorCounts[1]);System.out.println("黃色花朵的居民數(shù)量:"+colorCounts[2]);}}在例4.2中使用了一個(gè)二維布爾數(shù)組flowerPreferences,其中的每個(gè)元素代表一個(gè)居民對(duì)花朵顏色的喜好,然后通過(guò)遍歷二維數(shù)組,統(tǒng)計(jì)每種花朵顏色的居民數(shù)量,并將結(jié)果存儲(chǔ)在整型數(shù)組colorCounts中,最后輸出每種花朵顏色的居民數(shù)量。02Vector類(lèi)(向量)函數(shù)的參4.2.1概述4.2Vector(向量)在Java中,Vector是一種動(dòng)態(tài)數(shù)組,可以根據(jù)需要增長(zhǎng)或縮小。它是Java集合框架的一部分,Vector(以及其他Java集合,如ArrayList)相對(duì)于數(shù)組的優(yōu)勢(shì)主要包括以下幾點(diǎn):能夠動(dòng)態(tài)調(diào)整大?。簲?shù)組在創(chuàng)建時(shí)需要指定大小,并且一旦創(chuàng)建就無(wú)法更改大小。相比之下,Vector可以動(dòng)態(tài)地調(diào)整大小,當(dāng)添加更多的元素時(shí),它會(huì)自動(dòng)增長(zhǎng),當(dāng)刪除元素時(shí),它也可以縮小。提供豐富的操作:Vector類(lèi)提供了許多有用的方法,如添加、刪除、獲取元素,查找元素的索引,檢查元素是否存在等。而數(shù)組沒(méi)有這些內(nèi)置方法,需要手動(dòng)編寫(xiě)代碼來(lái)實(shí)現(xiàn)這些操作??梢园煌?lèi)型的元素:數(shù)組可以存儲(chǔ)基本數(shù)據(jù)類(lèi)型或?qū)ο螅粋€(gè)數(shù)組只能存儲(chǔ)一種類(lèi)型的元素。相比之下,Vector可以存儲(chǔ)不同類(lèi)型的對(duì)象(盡管這不是一個(gè)推薦的做法,因?yàn)樗赡軙?huì)導(dǎo)致類(lèi)型轉(zhuǎn)換錯(cuò)誤)。函數(shù)的參4.2Vector(向量)內(nèi)置的同步支持:Vector是線程安全的,可以在多線程環(huán)境中使用,而不需要外部同步。然而,這些優(yōu)點(diǎn)并不意味著你應(yīng)該始終使用Vector代替數(shù)組。在某些情況下,數(shù)組可能是更好的選擇。例如,對(duì)于固定大小,且不需要執(zhí)行復(fù)雜操作的數(shù)據(jù)集,數(shù)組可能會(huì)提供更高的性能。另外,如果你正在處理基本數(shù)據(jù)類(lèi)型(byte,short,int,long,float,double,char,boolean),數(shù)組可能會(huì)更有效,因?yàn)榧蠒?huì)自動(dòng)裝箱和拆箱這些類(lèi)型,這會(huì)帶來(lái)額外的開(kāi)銷(xiāo)。4.2.2Vector類(lèi)的構(gòu)造方法4.2Vector(向量)Java的Vector類(lèi)提供了三種主要的構(gòu)造方法:1.無(wú)參數(shù)構(gòu)造方法:這個(gè)構(gòu)造方法創(chuàng)建一個(gè)默認(rèn)大?。ㄈ萘浚?0的空向量,其基本格式為Vector<E>vector=newVector<>();2.指定初始容量的構(gòu)造方法:這個(gè)構(gòu)造方法創(chuàng)建一個(gè)指定大小的空向量。如果向量的元素?cái)?shù)量超過(guò)了初始容量,向量的容量會(huì)自動(dòng)增長(zhǎng),其基本格式為Vector<E>vector=newVector<>(initialCapacity);
其中initialCapacity是向量的初始容量。4.2Vector(向量)3.指定初始容量和容量增長(zhǎng)的構(gòu)造方法:這個(gè)構(gòu)造方法創(chuàng)建一個(gè)指定大小的空向量,并指定當(dāng)需要增加容量時(shí),容量的增長(zhǎng)量,其基本格式為
Vector<E>vector=newVector<>(initialCapacity,capacityIncrement);
其中initialCapacity是向量的初始容量,capacityIncrement是向量的容量增長(zhǎng)量。如果capacityIncrement為0,當(dāng)需要增加容量時(shí),向量的新容量將是其舊容量的兩倍。在這些構(gòu)造方法中,E是向量元素的類(lèi)型(下文的E相同)。如果指定的初始容量為負(fù),這些構(gòu)造方法都會(huì)拋出IllegalArgumentException錯(cuò)誤。4.2Vector(向量)4.2.3Vector類(lèi)對(duì)象的操作Vector類(lèi)提供了一系列方法來(lái)增加、刪除和查找元素。(1)增加元素add(Eelement):在向量的末尾添加一個(gè)元素。add(intindex,Eelement):在向量的指定位置插入一個(gè)元素,后面的元素向后移動(dòng)。addElement(Eobj):在向量的末尾添加一個(gè)元素,這是一個(gè)遺留方法,與add(Eelement)功能相同。下面是一個(gè)添加元素的示例://創(chuàng)建一個(gè)Vector對(duì)象Vector<String>books=newVector<>();books.addElement("1984");4.2Vector(向量)//使用add方法在Vector末尾添加元素books.add("TheGreatGatsby");books.add("MobyDick");//使用add方法在特定位置插入元素books.add(1,"ToKillaMockingbird");//使用addElement方法添加元素,這是一個(gè)遺留方法,與add方法功能相同(2)刪除元素remove(intindex):刪除向量中指定位置的元素,后面的元素向前移動(dòng)。remove(Objecto):刪除向量中第一次出現(xiàn)的指定元素(如果存在的話)。removeElement(Objectobj):刪除向量中第一次出現(xiàn)的指定元素,這是一個(gè)遺留方法,與remove(Objecto)功能相同。removeAllElements():刪除向量中的所有元素,這是一個(gè)遺留方法,與clear()功能相同。4.2Vector(向量)
下面是刪除元素的示例://創(chuàng)建一個(gè)Vector對(duì)象Vector<String>books=newVector<>();//添加一些元素books.add("TheGreatGatsby");books.add("MobyDick");books.add("ToKillaMockingbird");books.add("1984");//使用remove方法刪除特定位置的元素books.remove(1);//使用remove方法刪除第一次出現(xiàn)的特定元素books.remove("1984");//使用removeElement方法刪除第一次出現(xiàn)的特定元素,這是一個(gè)遺留方法,與remove方法功能相同books.removeElement("TheGreatGatsby");4.2Vector(向量)
(3)查找元素get(intindex):返回向量中指定位置的元素。indexOf(Objecto):返回向量中第一次出現(xiàn)的指定元素的索引,如果向量不包含該元素,返回-1。lastIndexOf(Objecto):返回向量中最后一次出現(xiàn)的指定元素的索引,如果向量不包含該元素,返回-1。contains(Objecto):如果向量包含指定的元素,返回true。elementAt(intindex):返回向量中指定位置的元素,這是一個(gè)遺留方法,與get(intindex)功能相同。如果索引超出范圍(索引小于0或大于等于向量的大?。?,這些方法都可以拋出ArrayIndexOutOfBoundsException。4.2Vector(向量)下面是查找元素的示例://創(chuàng)建一個(gè)Vector對(duì)象Vectorbooks=newVector<>();//添加一些元素books.add("TheGreatGatsby");books.add("MobyDick");books.add("ToKillaMockingbird");books.add("1984");//使用contains方法檢查Vector是否包含特定元素if(books.contains("MobyDick")){System.out.println("MobyDickisinthelist.");}else {System.out.println("MobyDickisnotinthelist.");}4.2Vector(向量)//使用indexOf方法獲取特定元素在Vector中第一次出現(xiàn)的索引intindex=books.indexOf("1984");if(index!=-1){System.out.println("1984isatindex"+index);}else{System.out.println("1984isnotinthelist.");}//使用elementAt方法獲取特定位置的元素StringbookAtPosition2=books.elementAt(2);System.out.println("Thebookatposition2is"+bookAtPositions)4.2Vector(向量)例4.3在一個(gè)遙遠(yuǎn)的星系中,存在著一種稀有的能量晶石,被稱(chēng)為“星辰石”。這種石頭蘊(yùn)含著強(qiáng)大的能量,可以用于推動(dòng)飛船和供能設(shè)備。星際探險(xiǎn)家們紛紛來(lái)到這個(gè)星系,希望能夠找到并收集星辰石。在星系中,有一支由不同種族的探險(xiǎn)家組成的隊(duì)伍,他們需要將收集到的星辰石進(jìn)行分配。每個(gè)探險(xiǎn)家都有一個(gè)身份和一定數(shù)量的星辰石?,F(xiàn)在需要編寫(xiě)一個(gè)簡(jiǎn)單的Java程序,使用向量來(lái)存儲(chǔ)探險(xiǎn)家的身份和星辰石數(shù)量,并計(jì)算隊(duì)伍總共收集到的星辰石數(shù)量。引導(dǎo)Chatgpt生成的自然語(yǔ)言如下:編寫(xiě)Java程序,請(qǐng)用一個(gè)向量存儲(chǔ)探險(xiǎn)家身份和星辰石數(shù)量,并計(jì)算隊(duì)伍總共收集到的星辰石數(shù)量。4.2Vector(向量)Chatgpt給出的代碼如下:importjava.util.Vector;publicclassEnergyCrystalAllocation{publicstaticvoidmain(String[]args){//創(chuàng)建探險(xiǎn)家的身份和星辰石數(shù)量的向量Vector<String>identities=newVector<>();Vector<Integer>crystalQuantities=newVector<>();//添加探險(xiǎn)家的身份和星辰石數(shù)量數(shù)據(jù)identities.add("人類(lèi)探險(xiǎn)家");crystalQuantities.add(10);identities.add("外星生物探險(xiǎn)家");crystalQuantities.add(8);identities.add("機(jī)器人探險(xiǎn)家");
crystalQuantities.add(12);4.2Vector(向量)//計(jì)算隊(duì)伍總共收集到的星辰石數(shù)量inttotalCrystalQuantity=0;for(intquantity:crystalQuantities){
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年河南藝術(shù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案詳解
- 2026年重慶工信職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)及參考答案詳解1套
- 2026年內(nèi)蒙古伊克昭盟單招職業(yè)適應(yīng)性測(cè)試題庫(kù)及完整答案詳解1套
- 2026年湖南工藝美術(shù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)含答案詳解
- 2026年江西外語(yǔ)外貿(mào)職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)及參考答案詳解
- 2026年內(nèi)蒙古北方職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試題庫(kù)及參考答案詳解一套
- 護(hù)士長(zhǎng)競(jìng)爭(zhēng)上崗面試題及答案
- 藥學(xué)公招面試題及答案
- 暑假工勞動(dòng)合同協(xié)議書(shū)范本
- 公司風(fēng)險(xiǎn)報(bào)告模板
- 2025年下半年貴州遵義市市直事業(yè)單位選調(diào)56人考試筆試備考題庫(kù)及答案解析
- 2026年企業(yè)生產(chǎn)計(jì)劃制定優(yōu)化與訂單交付率提升方案
- 借用土地合同范本
- 支撐梁鋼筋自動(dòng)計(jì)算表模板
- 2025天津大學(xué)管理崗位集中招聘15人筆試考試備考題庫(kù)及答案解析
- 請(qǐng)結(jié)合材料理論聯(lián)系實(shí)際分析如何正確評(píng)價(jià)人生價(jià)值?人生價(jià)值的實(shí)現(xiàn)需要哪些條件?參考答案
- 生物安全實(shí)驗(yàn)室自查報(bào)告及整改措施
- 2026年黨支部主題黨日活動(dòng)方案
- 醫(yī)療健康大數(shù)據(jù)的精準(zhǔn)營(yíng)養(yǎng)方案
- 幼兒園中班交通安全教育課件
- 食堂衛(wèi)生檢查與考核標(biāo)準(zhǔn)建立
評(píng)論
0/150
提交評(píng)論