




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1、課程名稱:數(shù)組的定義及使用2、知識點(diǎn)2.1、上次課程的主要知識點(diǎn)1、類與對象的組成以及加強(qiáng);2、簡單Java類開發(fā)。2.2、本次預(yù)計(jì)講解的知識點(diǎn)1、數(shù)組的基本定義;2、數(shù)組的使用;3、數(shù)組與方法間的互操作;4、數(shù)組有關(guān)的操作類庫支持。3、具體內(nèi)容()所有的開發(fā)之中都一定要使用到數(shù)組,但是數(shù)組沒有講解的這么復(fù)雜。之所以本次要講解的比較多,主要是為了防止筆試中出現(xiàn)的問題。3.1、數(shù)組的基本概念數(shù)組指的是一組相關(guān)變量的集合。如果說現(xiàn)在要求你定義100個(gè)整型變量,那么按照最原始的方式則肯定這樣定義:int i1 ;int i2 ;.int i100 ;這種操作可以實(shí)現(xiàn)要求,但是這些變量的關(guān)聯(lián)實(shí)在是
2、太麻煩了。為此在開發(fā)之中可以利用數(shù)組來解決這一問題。在Java中數(shù)組屬于引用數(shù)據(jù)類型,既然是引用數(shù)據(jù)類型就牽扯到內(nèi)存的關(guān)系。對于數(shù)組的定義語法有以下兩種形式:· 聲明并開辟數(shù)組:數(shù)據(jù)類型 數(shù)組名稱 = new 數(shù)據(jù)類型 長度;數(shù)據(jù)類型 數(shù)組名稱 = new 數(shù)據(jù)類型 長度;· 分步完成:|- 聲明數(shù)組:數(shù)據(jù)類型 數(shù)組名稱 = null;數(shù)據(jù)類型 數(shù)組名稱= null;|- 開辟數(shù)組:數(shù)組名稱 = new 數(shù)據(jù)類型 長度;當(dāng)數(shù)組開辟空間之后那么就可以采用“數(shù)組索引”的形式進(jìn)行數(shù)組的訪問,但是需要注意的是,如果現(xiàn)在數(shù)組的長度為3,那么索引的范圍:0 2(一共3個(gè)元素)。如果操作
3、中超過了數(shù)組的允許索引范圍,則程序在運(yùn)行過程之中會(huì)出現(xiàn)“ArrayIndexOutOfBoundsException”(數(shù)組索引超出綁定異常,數(shù)組越界)。以上的操作屬于數(shù)組的動(dòng)態(tài)初始化,動(dòng)態(tài)初始化的特點(diǎn),是數(shù)組開辟空間之后,數(shù)組中每個(gè)元素的內(nèi)容都是其對應(yīng)數(shù)據(jù)類型的默認(rèn)值。范例:定義數(shù)組public class ArrayDemo / 程序必須有類public static void main(String args) int data = new int 3 ;/ 開辟了一個(gè)data數(shù)組,長度為3System.out.println(data0) ;System.out.println(dat
4、a1) ;System.out.println(data2) ;范例:數(shù)組的賦值操作public class ArrayDemo / 程序必須有類public static void main(String args) int data = new int 3 ;/ 開辟了一個(gè)data數(shù)組,長度為3data0 = 10 ;/ 為數(shù)組賦值data1 = 20 ;data2 = 30 ;System.out.println(data0) ;System.out.println(data1) ;System.out.println(data2) ;但是現(xiàn)在數(shù)組本身是一種順序式的結(jié)構(gòu),所以在進(jìn)行數(shù)組內(nèi)
5、容輸出的時(shí)候,往往可以采用循環(huán)的方式完成。由于數(shù)組的長度是固定的,所以只要是進(jìn)行數(shù)組的輸出那么都會(huì)考慮使用for循環(huán),這里面就牽扯到了一個(gè)數(shù)組長度的取得,在Java中可以使用“數(shù)組對象.length”屬性取得。范例:數(shù)組輸出public class ArrayDemo / 程序必須有類public static void main(String args) int data = new int 3 ;/ 開辟了一個(gè)data數(shù)組,長度為3System.out.println(data.length) ;data0 = 10 ;/ 為數(shù)組賦值data1 = 20 ;data2 = 30 ;for
6、(int x = 0 ; x < data.length ; x +) System.out.print(datax + "、") ;3.2、數(shù)組的引用分析引用數(shù)據(jù)類型的分析過程幾乎都是一樣的,所以數(shù)組的引用分析其本質(zhì)也是一樣的,與對象的流程是相同的,以下面的代碼為例。public class ArrayDemo / 程序必須有類public static void main(String args) int data = new int 3 ;/ 開辟了一個(gè)data數(shù)組,長度為3System.out.println(data.length) ;data0 = 10
7、;/ 為數(shù)組賦值data1 = 20 ;data2 = 30 ;for (int x = 0 ; x < data.length ; x +) System.out.print(datax + "、") ;以上的流程與普通對象本質(zhì)上是沒有什么區(qū)別的,唯一的區(qū)別是在于普通的類對象是保存屬性,利用屬性名稱來操作,但是數(shù)組保存的是一組內(nèi)容,利用索引來操作。那么既然此關(guān)系可以弄明白,所謂的分步的操作也就一樣的過程。范例:分步實(shí)例化數(shù)組對象public class ArrayDemo / 程序必須有類public static void main(String args) in
8、t data = null ;/ 只有聲明的時(shí)候加上“”data = new int 3 ;/ 開辟了一個(gè)data數(shù)組,長度為3System.out.println(data.length) ;data0 = 10 ;/ 為數(shù)組賦值data1 = 20 ;data2 = 30 ;for (int x = 0 ; x < data.length ; x +) System.out.print(datax + "、") ;那么現(xiàn)在如果此關(guān)系可以明白的話,就意味著可以進(jìn)行數(shù)組的引用操作了。引用的本質(zhì)同一塊堆內(nèi)存空間被不同的棧內(nèi)存所指向。范例:數(shù)組的引用操作public cl
9、ass ArrayDemo / 程序必須有類public static void main(String args) int data = new int 3 ;/ 開辟了一個(gè)data數(shù)組,長度為3data0 = 10 ;/ 為數(shù)組賦值data1 = 20 ;data2 = 30 ;int temp = data ; / 引用操作temp 0 = 100 ;/ 修改數(shù)據(jù)for (int x = 0 ; x < data.length ; x +) System.out.print(datax + "、") ;還是通過內(nèi)存關(guān)系圖來進(jìn)行操作描述。3.3、數(shù)組的靜態(tài)初始化以
10、上是針對于數(shù)組的動(dòng)態(tài)初始化操作講解的,動(dòng)態(tài)初始化操作的特點(diǎn)在于其只能夠在開辟數(shù)組空間之后進(jìn)行數(shù)組內(nèi)容的賦值,如果現(xiàn)在希望數(shù)組開辟之后就可以存在明確的內(nèi)容,那么則可以使用數(shù)組的靜態(tài)初始化,而語法有如下兩種:第一種:簡化型數(shù)據(jù)類型 數(shù)組名稱 = 值,值,. ;數(shù)據(jù)類型 數(shù)組名稱 = 值,值,. ;第二種:完全型(推薦使用)數(shù)據(jù)類型 數(shù)組名稱 = new 數(shù)據(jù)類型 值,值,. ;數(shù)據(jù)類型 數(shù)組名稱= new 數(shù)據(jù)類型 值,值,. ;范例:使用數(shù)組的靜態(tài)初始化public class ArrayDemo / 程序必須有類public static void main(String args) int
11、data = new int 10,20,30 ; / 數(shù)組的靜態(tài)初始化for (int x = 0 ; x < data.length ; x +) System.out.print(datax + "、") ;范例:判斷某一個(gè)數(shù)字是否在數(shù)組中存在?最簡單的做法是進(jìn)行for循環(huán)操作,一次與每一個(gè)數(shù)組中的內(nèi)容進(jìn)行相等比較。public class ArrayDemo / 程序必須有類public static void main(String args) int sdata = 11 ;/ 要查找的數(shù)據(jù)boolean flag = false ;/ 保存查找結(jié)果,如果
12、找到了修改為trueint data = new int 10,20,30,11,22,33 ;for (int x = 0 ; x < data.length ; x +) if (data x = sdata) / 現(xiàn)在已經(jīng)查找到了內(nèi)容flag = true ;break ; / 退出循環(huán)if (flag) System.out.println("該數(shù)據(jù)已經(jīng)查找到!") ; else System.out.println("該數(shù)據(jù)沒有查找到!") ;但是嚴(yán)格來講現(xiàn)在這樣的代碼性能并不好,因?yàn)樗枰獙?shù)組中的每一個(gè)元素都進(jìn)行判斷。面試題:請解釋什
13、么叫二分查找法(折半查找法)二分查找法的重要支持:數(shù)組中的數(shù)據(jù)必須是有序的。public class ArrayDemo / 程序必須有類public static void main(String args) int sdata = 161 ; int data = new int 10,20,30,40,50,60 ;System.out.println(search(sdata,data) ;public static boolean search(int sdate,int data) System.out.print(java.util.Arrays.toString(data) +
14、 " len = ") ;if (data.length = 1) return sdate = data0 ; else int len = data.length / 2 ;/ 012=1、01=1System.out.println(len + "," + (sdate = datalen) ;if (sdate > datalen) / 右邊,取出新的數(shù)組數(shù)據(jù)int temp = null ;if (data.length % 2 = 0) temp = new int len ; else temp = new int len + 1 ;
15、int foot = 0 ; for (int x = len ; x < data.length ; x +) tempfoot + = datax ;return search(sdate,temp) ; else if (sdate < datalen) / 左邊int temp = new int len ;for (int x = 0 ; x < len ; x +) tempx = datax ;return search(sdate,temp) ; else / 等于return search(sdate,new intdatalen) ;這種代碼只是一個(gè)娛樂。
16、3.4、二維數(shù)組(理解)在開發(fā)之中,之前使用的數(shù)組只有一個(gè)索引下標(biāo),所以可以簡單將其理解為是一個(gè)一維數(shù)組。一維數(shù)組的特點(diǎn)是可以根據(jù)一個(gè)索引號確定內(nèi)容,好比如下形式:索引號012345數(shù)據(jù)902127786767二維數(shù)組實(shí)際上與數(shù)據(jù)表的形式是完全相同的,有行和列組成,那么要想確認(rèn)一個(gè)數(shù)據(jù),必須有行和列的編號,所以二維數(shù)組的組成如下:行索引、列索引列索引0列索引1列索引2列索引3列索引4行索引0534347行索引1347342346行索引2686987344現(xiàn)在要想確定987這個(gè)數(shù)據(jù),那么就需要行索引為2,列索引也為2才可以定位到。對于二維數(shù)組的定義有兩種語法結(jié)構(gòu):· 動(dòng)態(tài)初始化:數(shù)據(jù)類
17、型 數(shù)組名稱 = new 數(shù)據(jù)類型行個(gè)數(shù)列個(gè)數(shù) ;· 靜態(tài)初始化:數(shù)據(jù)類型 數(shù)組名稱 = new 數(shù)據(jù)類型 數(shù)據(jù),數(shù)據(jù),數(shù)據(jù) ,數(shù)據(jù),數(shù)據(jù),數(shù)據(jù) , . ;實(shí)際上可以發(fā)現(xiàn),二維數(shù)組的本質(zhì)就是在數(shù)組里面繼續(xù)嵌套了其他的數(shù)組。范例:觀察二維數(shù)組使用public class ArrayDemo / 程序必須有類public static void main(String args) int data = new int 1,2 ,4,5,6,7,8,9,10 ;for (int x = 0 ; x < data.length ; x +) / 控制數(shù)組行for (int y = 0
18、; y < datax.length ; y +) System.out.print(dataxy + "、") ;System.out.println() ;面試題:實(shí)現(xiàn)二維數(shù)組轉(zhuǎn)置public class ArrayDemo / 程序必須有類public static void main(String args) int data = new int 1,2,3 ,4,5,6,7,8,9 ;for (int x = 0 ; x < data.length ; x +) / 控制數(shù)組行for (int y = 0 ; y <= x ; y +) if (
19、x != y) / 交換int temp = dataxy ;dataxy = datayx ;datayx = temp ;for (int x = 0 ; x < data.length ; x +) / 控制數(shù)組行for (int y = 0 ; y < datax.length ; y +) System.out.print(dataxy + "、") ;System.out.println() ;這些都屬于對于數(shù)組的邏輯控制,本身只能夠作為擴(kuò)充你大腦思維使用的東西,對實(shí)際的開發(fā)幫助不大。3.5、數(shù)組與方法在數(shù)組與方法進(jìn)行傳遞的操作過程之中,實(shí)際上就屬于
20、引用傳遞。在數(shù)組與方法間的操作中,主要考慮兩種形式:方法接收數(shù)組,另外一種就是方法返回?cái)?shù)組。不管是接收還是返回,最終操作的一定是一個(gè)堆內(nèi)存的使用。范例:利用方法來接收數(shù)組public class ArrayDemo / 程序必須有類public static void main(String args) int data = new int 1,3,5,7,9 ;/ 是一個(gè)數(shù)組printArray(data) ;public static void printArray(int temp) / 接收一個(gè)數(shù)組for (int x = 0 ; x < temp.length ; x +) S
21、ystem.out.print(tempx + "、") ;System.out.println() ;/ 換行整個(gè)的操作過程與數(shù)組的引用接收是完全一樣的。但是這個(gè)時(shí)候的代碼只是針對于當(dāng)前的數(shù)組內(nèi)容進(jìn)行了簡單的輸出,于是下面可以進(jìn)一步的加強(qiáng),例如:設(shè)置一個(gè)方法,在此方法之中實(shí)現(xiàn)數(shù)據(jù)的乘2操作。范例:方法里面修改數(shù)組內(nèi)容public class ArrayDemo / 程序必須有類public static void main(String args) int data = new int 1,3,5,7,9 ;/ 是一個(gè)數(shù)組inc(data) ;/ int arr = da
22、ta ;printArray(data) ;public static void inc(int arr) / 負(fù)責(zé)數(shù)組內(nèi)容的改變for (int x = 0 ; x < arr.length ; x +) arrx = arrx * 2 ;/ 數(shù)組中的每個(gè)元素乘后保存public static void printArray(int temp) / 接收一個(gè)數(shù)組for (int x = 0 ; x < temp.length ; x +) System.out.print(tempx + "、") ;System.out.println() ;/ 換行在大部分
23、情況下,如果某一個(gè)方法可以接收的數(shù)據(jù)類型是引用數(shù)據(jù)類型,那么往往都不需要設(shè)置返回值。范例:數(shù)據(jù)排序操作(理解)面對數(shù)組中發(fā)現(xiàn)可以保存有多個(gè)數(shù)據(jù),但是在很多時(shí)候(例如:二分查找法)那么必須針對于數(shù)組中的數(shù)據(jù)進(jìn)行排序,所以這個(gè)時(shí)候就需要進(jìn)行一些復(fù)雜的處理。通過分析可以發(fā)現(xiàn),排序并不是一次完成的,而是需要多次,也就是說至少需要“數(shù)組長度 - 1”次。public class ArrayDemo / 程序必須有類public static void main(String args) int data = new int 89,10,20,1,0,2,8,3,90,67,9,7 ;for (int x
24、 = 0 ; x < data.length - 1; x +) for (int y = 0 ; y < data.length - 1 ; y +) if (datay > datay + 1) int temp = datay ;data y = data y + 1 ;data y + 1 = temp ;System.out.print("第" + x + "次排序:") ;printArray(data) ;public static void printArray(int temp) / 接收一個(gè)數(shù)組for (int x
25、= 0 ; x < temp.length ; x +) System.out.print(tempx + "、") ;System.out.println() ;/ 換行此時(shí)的確是已經(jīng)實(shí)現(xiàn)了排序操作的要求,但非常遺憾的是,這個(gè)代碼里面主方法的代碼太多了。主方法本身就是一個(gè)日后程序調(diào)用的客戶端,所以在客戶端的操作代碼中不應(yīng)該編寫過多的復(fù)雜操作,應(yīng)該將代碼進(jìn)行簡化處理。面試題:請編寫一個(gè)數(shù)組排序操作public class ArrayDemo / 程序必須有類public static void main(String args) int data = new int
26、89,10,20,1,0,2,8,3,90,67,9,7 ;sort(data) ;/ 客戶端調(diào)用越簡單越好printArray(data) ;public static void sort(int arr) / 單獨(dú)完成了一個(gè)數(shù)組的排序操作for (int x = 0 ; x < arr.length - 1; x +) for (int y = 0 ; y < arr.length - 1 ; y +) if (arry > arry + 1) int temp = arry ;arr y = arr y + 1 ;arr y + 1 = temp ;public sta
27、tic void printArray(int temp) / 接收一個(gè)數(shù)組for (int x = 0 ; x < temp.length ; x +) System.out.print(tempx + "、") ;System.out.println() ;/ 換行范例:數(shù)組的反轉(zhuǎn)操作就是將一個(gè)數(shù)組實(shí)現(xiàn)首位交換,但是交換的實(shí)現(xiàn)方式有兩種。第一種實(shí)現(xiàn)思路:定義一個(gè)新的數(shù)組,而后將原始數(shù)組的內(nèi)容進(jìn)行逆序輸出,隨后改變原始數(shù)組的引用。public class ArrayDemo / 程序必須有類public static void main(String args) i
28、nt data = new int 89,10,20,1,0,2,8,3,90,67,9,7 ;int newArr = new int data.length ; / 聲明一個(gè)與原始數(shù)組大小相同的數(shù)組int foot = data.length - 1 ; / 定義原始數(shù)組的操作腳標(biāo)for (int x = 0 ; x < newArr.length ; x +) newArrx = datafoot - ; / 逆序保存data = newArr ;/ 改變原始數(shù)組引用printArray(data) ;public static void printArray(int temp)
29、/ 接收一個(gè)數(shù)組for (int x = 0 ; x < temp.length ; x +) System.out.print(tempx + "、") ;System.out.println() ;/ 換行通過內(nèi)存關(guān)系圖可以發(fā)現(xiàn),以上的代碼雖然可以實(shí)現(xiàn)轉(zhuǎn)置,但是會(huì)產(chǎn)生垃圾。而我們開發(fā)的原則,應(yīng)該是產(chǎn)生越少的垃圾越好。第二種實(shí)現(xiàn)方式:在一個(gè)數(shù)組上實(shí)現(xiàn)轉(zhuǎn)置public class ArrayDemo / 程序必須有類public static void main(String args) int data = new int 89,10,20,1,0,2,8,3,90
30、,67,9,7 ;reverse(data) ;printArray(data) ;public static void reverse(int arr) / 數(shù)組轉(zhuǎn)置int center = arr.length / 2 ;/ 計(jì)算交換的中間點(diǎn)int head = 0 ;int tail = arr.length - 1 ;for (int x = 0 ; x < center ; x +) int temp = arrhead ;arrhead = arrtail ;arrtail = temp ;head + ;tail - ;public static void printArr
31、ay(int temp) / 接收一個(gè)數(shù)組for (int x = 0 ; x < temp.length ; x +) System.out.print(tempx + "、") ;System.out.println() ;/ 換行以上都是方法接收數(shù)組的形式,下面再來看一下方法返回?cái)?shù)組的操作。如果某一個(gè)方法要返回一個(gè)數(shù)組,只需要將方法的返回值類型聲明為數(shù)組即可。范例:方法返回?cái)?shù)組public class ArrayDemo / 程序必須有類public static void main(String args) int data = init() ;printAr
32、ray(data) ;public static int init() / 返回一個(gè)數(shù)組return new int 89,10,20,1,0,2,8,3,90,67,9,7 ;public static void printArray(int temp) / 接收一個(gè)數(shù)組for (int x = 0 ; x < temp.length ; x +) System.out.print(tempx + "、") ;System.out.println() ;/ 換行如果返回的是引用數(shù)據(jù)類型,那么返回null語法上是沒有任何問題的。3.6、與數(shù)組有關(guān)的類庫Java本身提供
33、有一系列的開發(fā)類庫幫助用戶進(jìn)行代碼編寫,那么下面首先給出兩個(gè)基本的數(shù)組操作方法1、數(shù)組拷貝:以下的語法與原始定義有出入,以后再細(xì)化;· 拷貝:System.arraycopy(原始數(shù)組,原始數(shù)組開始點(diǎn),目標(biāo)數(shù)組,目標(biāo)數(shù)組的開始點(diǎn),拷貝長度)。范例:數(shù)組拷貝· 原始數(shù)組1:1、2、3、4、5、6、7、8、9;· 原始數(shù)組2:10、20、30、40、50、60、70、80、90;· 希望實(shí)現(xiàn)數(shù)組2的部分內(nèi)容替換掉數(shù)組1的內(nèi)容:1、60、70、80、5、6、7、8、9。public class ArrayDemo / 程序必須有類public static void main(String args) int data1 = new int 1,2,3,4,5,6,7,8,9 ;int data2 = new int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025清華大學(xué)合同制教職員工管理規(guī)程
- 2025鋼材供貨合同模板
- 2025標(biāo)準(zhǔn)租房合同協(xié)議書模板
- 2025新版股權(quán)轉(zhuǎn)讓合同范本
- 2025簡化版手寫辦公室租賃合同
- 2025超市供應(yīng)商采購合同
- 農(nóng)村漁業(yè)合作捕撈及加工處理合同
- 遙感技術(shù)在農(nóng)村環(huán)境治理中的應(yīng)用合同
- 建筑工程總承包合同條款
- 物理測試題大全及答案
- 輕型載貨汽車制動(dòng)器設(shè)計(jì)
- 高考語文120個(gè)重點(diǎn)文言實(shí)詞
- 江蘇省糧食集團(tuán)招聘筆試題庫2024
- 2023年全國職業(yè)院校技能大賽-老年護(hù)理與保健賽項(xiàng)規(guī)程
- 2024年深圳市彩田學(xué)校初中部小升初入學(xué)分班考試數(shù)學(xué)模擬試卷附答案解析
- 2024年安徽安慶市交通控股集團(tuán)有限公司招聘筆試沖刺題(帶答案解析)
- 《沙龍培訓(xùn)》課件
- 充電樁四方協(xié)議書范本
- 中考英語情景交際和看圖寫話
- 知道智慧網(wǎng)課《科學(xué)社會(huì)主義概論》章節(jié)測試答案
- 事故調(diào)查分析課件
評論
0/150
提交評論