成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

方法和數(shù)組就是這么簡單!

darkerXi / 1530人閱讀

摘要:數(shù)組就是一個簡單的線性序列,這使得元素訪問非??焖?。堆區(qū)堆內(nèi)存用來存放創(chuàng)建的對象和數(shù)組。堆內(nèi)存中的實體不再被指向時,啟動垃圾回收機制,自動清除,這也是優(yōu)于的表現(xiàn)之一中需要程序員手動清除。

第三章 方法和數(shù)組 3.1 概述

還記得我們的HelloWorld例程嗎?我們現(xiàn)在對于輸出語句應(yīng)該已經(jīng)很熟悉了,

解釋:

System 是系統(tǒng)類。

out 是標(biāo)準(zhǔn)輸出對象

println() 是一個方法。

如果我們想要在一個類中實現(xiàn)很多功能,但是如果我們想要,多次使用,某一個功能,顯然我們需要重復(fù)書寫這個功能的代碼多次,顯然,這是不明智的。所以方法就來拯救我們了。

? 3.1_1方法的基本定義

定義:方法是定義在類中的一段獨立的代碼塊,用來實現(xiàn)某個功能。

其實我們在編程界中更喜歡叫它們?yōu)楹瘮?shù),但是在Java中我們也可以叫做方法

作用:

·函數(shù)的主要作用是為了提高代碼的復(fù)用性。

·使程序簡短而清晰,更加利于維護

A:修飾符: public static (暫時了解這一個 后期補充)

B:返回值類型: 就是功能結(jié)果的數(shù)據(jù)類型

有一些方法執(zhí)行代碼中的命令即可,執(zhí)行后就可以結(jié)束了,并沒有返回值(void)

有一些方法需要將最后的結(jié)果返回給你,從而讓開發(fā)者使用這個結(jié)果

舉例更好理解哦:最近有一場周杰倫的演唱會,我通過好多朋友幫忙一起的搶票方法,最后得到了兩張票,這兩張票就是“搶票”方>法的返回值,我(開發(fā)者)可以對這個返回值進行任何操作,例如自己去看,或者送給朋友,甚至可以用來當(dāng)草稿紙(哭...)

C:參數(shù)類型:參數(shù)的數(shù)據(jù)類型

主方法可以調(diào)用其他方法,其他方法可以互相調(diào)用,但不能調(diào)用主方法,主函數(shù)是系統(tǒng)調(diào)用的。

? 3.1_方法(函數(shù))的調(diào)用方法:

A:多帶帶使用,一般來說沒有意義(不代表有錯),所以不推薦

B:輸出調(diào)用,但是不夠好,因為我們可能需要針對結(jié)果進行進一步操作

C:賦值語句,推薦方案。

方法的調(diào)用優(yōu)化:

Eg:比較兩個數(shù)是否相等(在沒有熟練之前我們?nèi)匀煌扑]使用初始直觀的用法,程序可以正常的跑是我們的底線)

? 3.1_3 方法重載

一般來說,我們都是根據(jù)作用來命名方法(方法名有意義),但是很多時候會我們會針對不同的數(shù)據(jù)類型,或者參數(shù)個數(shù)來進行操作,例如我們所要求幾個數(shù)字中的最大值問題(如下圖)就出現(xiàn)了這兩種問題。使用方法重載,既可以保證命名有意義,也可以避免記憶過多的不同名稱

定義:用同一方法名定義多個方法,這些方法的參數(shù)個數(shù)或者參數(shù)類型不同

作用:使一個方法名賦予新的含義,使一個方法名可以多用

適用:實現(xiàn)細(xì)節(jié)不同的同一類功能時候

理解:其實就是使得一個方法擁有了更多的可能性,一個名稱解決多種問題。

注意:

1. 函數(shù)的返回類型不同,但參數(shù)個數(shù)和類型相同,不是重載

2. 重載函數(shù)的的參數(shù)個數(shù),參數(shù)類型,參數(shù)順序至少有一個需要不同

3.2數(shù)組
引文:我們在籃球場比賽中,夢之隊運動員共有10名,我們分別將每個人定義為幾號運動員,這樣我們找某一個人的時候,我們就會先找到夢之隊這支隊伍,然后去找對應(yīng)編號的人。
而數(shù)組就像這只隊伍的概念一樣,而數(shù)組中的每一個元素就是每一個球員,當(dāng)你需要找數(shù)組的某一個元素的時候,只需要找到你需要查找的數(shù)組(夢之隊),再根據(jù)數(shù)組下標(biāo)(對應(yīng)編號)去尋找對應(yīng)元素(球員)。
這樣做的好處就是,我們將一批同類型的元素整理歸納到了一起,并且標(biāo)號記錄。
既方便了查找與使用,又避免了定義多個變量的麻煩。
概念:以存儲一個固定大小的相同類型元素的順序集合。

數(shù)組是用來存儲一系列數(shù)據(jù),但它往往被認(rèn)為是一系列相同類型的變量。

(所有的數(shù)組都是由連續(xù)的內(nèi)存位置組成)

格式:

第一種讀法:定義一個 dataType類型的數(shù)組 arrayRefvar 變量

第一種可以認(rèn)為是java風(fēng)格的定義格式,推薦第一種,不過也只是編程風(fēng)格不同罷了。

初始化:

A:概念:為數(shù)組開辟內(nèi)存空間,為每個數(shù)組元素賦予值(內(nèi)存分配問題就在下面哦)

B:方式:

a:動態(tài)初始化 → 只指定長度,由系統(tǒng)給出初始化值

b: 靜態(tài)初始化 → 給出初始化值,由系統(tǒng)決定長度

A:動態(tài)初始化格式:

數(shù)據(jù)類型 [] 數(shù)組名 = new 數(shù)據(jù)類型 [數(shù)組長度];

Eg: int [] arr = new int [3];

B:靜態(tài)初始化格式:

數(shù)據(jù)類型 [] 數(shù)組名 = new 數(shù)據(jù)類型 [] {元素1,元素2,...};

Eg:int [] arr = new int [] {1,2,3};

簡化格式:

數(shù)據(jù)類型 [] 數(shù)組名 = {元素1,元素2,...};

Eg:int [] arr = {1,2,3};

數(shù)組的訪問:

數(shù)組的元素是通過索引訪問的。數(shù)組索引從 0 開始,所以索引值從 0 到 數(shù)組長度-1。(這只球隊可是有0號選手的哦吼~)

進階補充知識:

在Java中,數(shù)組是一種效率最高的存儲和隨機訪問對象的引用序列的方式。數(shù)組就是一個簡單的線性序列,這使得元素訪問非常快速。但是為這種速度所付出的代價是數(shù)組對象的大小被固定,并且在其生命周期中不可改變。你可能會建議使用ArrayList,它可以通過創(chuàng)建一個新實例,然后把舊實例中所有的引用到移到新實例中,從而實現(xiàn)更多空間的自動分配。盡管通常應(yīng)該首選ArrayList而不是數(shù)組、但是這種彈性需要開銷,因此,ArrayList的效率比數(shù)組低很多。

——Thinking in Java 第16章

? 3.2_1 java中的內(nèi)存分配

Java為了對數(shù)據(jù)進行空間分配而劃分的5個內(nèi)存空間

棧區(qū)(stack area) 函數(shù)中定義的基本類型變量,對象的引用變量(對象在堆上的地址)都在函數(shù)的棧內(nèi)存中分配。
棧內(nèi)存特點,數(shù)數(shù)據(jù)一執(zhí)行完畢,變量會立即釋放,節(jié)約內(nèi)存空間。
棧內(nèi)存中的數(shù)據(jù),沒有默認(rèn)初始化值,需要手動設(shè)置。
堆區(qū)(heap area) 堆內(nèi)存用來存放new創(chuàng)建的對象和數(shù)組。
堆內(nèi)存中所有的實體都有內(nèi)存地址值。
堆內(nèi)存中的實體是用來封裝數(shù)據(jù)的,這些數(shù)據(jù)都有默認(rèn)初始化值。
堆內(nèi)存中的實體不再被指向時,JVM啟動垃圾回收機制,自動清除,這也是JAVA優(yōu)于C++的表現(xiàn)之一(C++中需要程序員手動清除)。
方法區(qū)(Method Area 存儲所有類(class)和靜態(tài)變量(static)
本地方法區(qū) (Native Method Area 后期補充
寄存器 后期補充
? 3.2_2常見數(shù)組練習(xí)

(一)遍歷數(shù)組

理解:簡單來說就是把數(shù)組中的每一個元素都讀一遍,你可以對數(shù)組中的每一個數(shù)進行處理,又或者找到數(shù)組中那個你需要的數(shù)。

但是有時候就想鴨,每一次我的數(shù)組元素數(shù)量較少的時候還可以,我數(shù)一數(shù)有多少個元素也就知道我需要遍歷多少次了,但是如果數(shù)組元素太多呢,又或者我把遍歷數(shù)組編寫成一個方法,參數(shù)就是一個數(shù)組,不同的數(shù)組(元素數(shù)量不同),很顯然需要遍歷的次數(shù)是不靈活的,所以我們介紹一個更為靈活的屬性——length

針對元素數(shù)量較多的數(shù)組 可以使用 length屬性 獲取數(shù)組的長度

(二)獲取數(shù)組中的最小值或最大值

思路:

從數(shù)組中任意找一個元素作為參照物

然后遍歷其他的元素

一次獲取和參照物進行比較,如果大就留下來,如果小就離開

(三)數(shù)組逆序

? 3.2_3 For-Each 循環(huán)

JDK 1.5 引進了一種新的循環(huán)類型,被稱為 For-Each 循環(huán)或者增強For循環(huán), 它能在不使用下標(biāo)的情況下遍歷數(shù)組。

格式:

它的功能強大就在于不必為了下標(biāo)的起始值和終止值而分心,代碼更加簡潔,更不容易出錯。

事物總是有兩面性的,雖然增強for循環(huán)帶來了簡潔和快速,但是并不是萬能的,有的時候我們必須使用傳統(tǒng)的for循環(huán),例如不希望遍歷每一個元素,或者在循環(huán)內(nèi)部需要使用下標(biāo)等。

補充:

如果僅僅是想要打印數(shù)組中的所有值,我們可以利用Arrays類中的toString方法

輸出后格式如下:“[1,3,6,5,6]”

? 3.2_4排序方法

貧窮使我面目全非……〒_〒

假如我想在某寶買一本五年高考,三年模擬(搞笑臉),又擔(dān)心買到的不是正版印刷(再次搞笑),我們可以選擇銷量優(yōu)先展示商品,而我們又嫌貴又渴望知識的時候(哈哈哈~),我們又可以選擇價格從低到高排序展示商品。

那么,網(wǎng)站是如何做到快速將商品按照某種規(guī)則排序的呢?

下面我們就來介紹幾種常見的排序方法

數(shù)組是用來存儲一些數(shù)據(jù)的“容器”,可能我們需要將其中的元素,按照我們一定的規(guī)則進行處理,使其成為有序的序列。

(一)冒泡排序

我們先通過一個直觀的例子來看一這種排序方法是如何操作的呢

要排序的數(shù)組 int[] = {3, 9, 6, 5};

第一趟排序:

第一次排序:3和9比較,3小于9,不交換位置:3 9 6 5

第二次排序:9和6比較,9大于6,交換位置:3 6 9 5

第二次排序:9和5比較,9大于5,交換位置:3 6 5 9

————————————————————————————

第二趟排序:

第一次排序:3和6比較,3小于6,不交換位置:3 6 5 9

第二次排序:6和5比較,6大于5,交換位置:3 5 6 9

————————————————————————————

第三趟排序:

第一次排序:3和5比較,3小于5,不交換位置:3 5 6 9

根據(jù)上圖的規(guī)律,我們得到了冒泡排序的原理:

重復(fù)地走訪要排列的元素列,一次比較兩個相鄰的元素,如果它們的順序錯誤則交換

走訪元素的工作是重復(fù)地進行直到?jīng)]有相鄰元素需要交換,也就是說該元素列已經(jīng)排序 完成。

為了理解這個看起來很復(fù)雜的定義,我們來梳理一下上面的例子:

第一趟:經(jīng)過三次排序,得到結(jié)果:3 6 5 9

第二趟:經(jīng)過兩次排序,得到結(jié)果:3 5 6 9

第三趟:經(jīng)過一次排序,得到結(jié)果:3 6 5 9

(第三趟也是存在的只不過是,在第二趟的時候結(jié)果已經(jīng)符合規(guī)定,)

我們通過梳理可以看到

我們在第一趟中,4個數(shù)字,經(jīng)歷了3次排序,確定了最大值

在第二趟中,3個數(shù)字(最后一位已經(jīng)確定,所以不計),經(jīng)歷了2次排序,確定了最大值

在第三趟中,2個數(shù)字(倒數(shù)兩位已經(jīng)確定,所以不計),經(jīng)歷了1次排序,確定了最大值

慢慢的最大值或者最小值(根據(jù)排序規(guī)則)會像氣泡一樣浮到數(shù)列的頂端,故得名冒泡排序

思路

1:外層循環(huán):控制它要走幾次。
假設(shè)你有5個數(shù),那就要走4次,最后一次不用走,最后那個數(shù)已 經(jīng)在它位置了所以就要length-1次。

2:內(nèi)層循環(huán):控制逐一比較,如果發(fā)現(xiàn)前一個數(shù)比后一個數(shù)大,則交換。
注意!因為越比較長度就越小了,所以長度要length-1-i。

所以:n個元素進行排序,我們需要進行n-1 趟,每一趟循環(huán) lenght-1-i次

Ps:length-1代表最后一項,數(shù)組下標(biāo)從0開始

冒泡排序只是我們眾多排序中的一種比較簡單的方法(效率不是很高,但入門必須學(xué)習(xí))

其他的排序方法,我們放到板塊數(shù)據(jù)結(jié)構(gòu)與算法中詳細(xì)講解

要想對數(shù)值型數(shù)組進行排序,可以使用Array類中的sort方法

格式:int[] arr = new int [520];

........

Array.sort(arr)

sort方法本質(zhì)是快速排序算法(高效快速)

? 3.2_5二維數(shù)組

具有兩個下標(biāo)的數(shù)組稱為二維數(shù)組。有些數(shù)據(jù)要依賴于兩個因素才能惟一地確定

例如我們下面的這個案例一個班級有三個學(xué)生,每個學(xué)生又對應(yīng)四科成績,所以我們必須用一個二維數(shù)組來存儲,第一項儲存學(xué)生信息,第二項存儲成績信息

Student Number Course1 Course2 Course3 Course4
Student1 55 66 58 77
Student2 87 58 48 64
Student3 65 78 70 56

Java中,二維數(shù)組中元素排列的順序是:

定義格式:

A:

B:

從最高維開始,分別為每一維分配空間

如果想要在定義的時候就直接賦值,格式見例題中的示例

? 3.26 常見二維數(shù)組練習(xí)

(一)遍歷二維數(shù)組

(一)普通for循環(huán)版

增強for循環(huán)版

Arrays類中的deepToString()方法

這個方法可以快速 打印一個二維數(shù)組的數(shù)據(jù)元素列表

(二)輸出楊輝三角

3.3補充問題
? 3.3_1參數(shù)傳遞問題

開局一張圖,內(nèi)容全靠編~

有了前面知識的一些鋪墊,我們終于可以引出這個問題了,諾,下面題目中利用方法重載給出了兩個不同參數(shù)的change方法,分別在主函數(shù)中輸出調(diào)用方法前和后的數(shù)據(jù),看一看輸出的數(shù)據(jù)和我們所想的一樣嗎?

小白:變量a和b在change方法中已經(jīng)被重新賦值了,第二局輸出那必然是 a=20, b=40
大佬:錯!錯!錯!正確結(jié)果為輸出 a=10, b=20

小白:雖然我也不太明白,但是有了第一個的經(jīng)驗,那我第二個我還不會嗎,arr[1] 當(dāng)然是2了
大佬:em......答案是4.......

(絕望臉...)

然后我們通過一張圖來分析一下這個問題

解釋:

當(dāng)基本類型作為形式參數(shù)的時候,實際參數(shù)(也就是主方法中的10和20)的值傳到了 這個方法中,無論其如何操作運算,均只是對被傳入的值進行操作,方法結(jié)束后即消失, 不會對實際參數(shù)有任何的影響

當(dāng)引用類型作為形式參數(shù)的時候,實際參數(shù)和形式參數(shù)均指向了同一個地址,所以形式 參數(shù)的改變會直接影響到實際參數(shù)

總結(jié):

基本類型:形式參數(shù)的改變對實際參數(shù)沒有影響

引用類型:形式參數(shù)的改變直接影響實際參數(shù)

? 3.3_2 加密問題(作為練習(xí))

加密規(guī)則: 將數(shù)據(jù)倒序,然后將每位數(shù)字都加上5,再用和除以10的余數(shù) 代替該數(shù)字,最后將第一位和最后一位數(shù)字交換

結(jié)尾:

如果內(nèi)容中有什么不足,或者錯誤的地方,歡迎大家給我留言提出意見, 蟹蟹大家 !^_^

如果能幫到你的話,那就來關(guān)注我吧!

在這里的我們素不相識,卻都在為了自己的夢而努力 ?

一個堅持推送原創(chuàng)Java技術(shù)的公眾號:理想二旬不止

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74649.html

相關(guān)文章

  • List集合就這么簡單【源碼剖析】

    摘要:線程不安全底層數(shù)據(jù)結(jié)構(gòu)是鏈表。的默認(rèn)初始化容量是,每次擴容時候增加原先容量的一半,也就是變?yōu)樵瓉淼谋秳h除元素時不會減少容量,若希望減少容量則調(diào)用它不是線程安全的。 前言 聲明,本文用得是jdk1.8 前一篇已經(jīng)講了Collection的總覽:Collection總覽,介紹了一些基礎(chǔ)知識。 現(xiàn)在這篇主要講List集合的三個子類: ArrayList 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組。線程不安全 ...

    cpupro 評論0 收藏0
  • 選擇排序就這么簡單

    摘要:選擇排序就這么簡單從上一篇已經(jīng)講解了冒泡排序了,本章主要講解的是選擇排序,希望大家看完能夠理解并手寫出選擇排序的代碼,然后就通過面試了如果我寫得有錯誤的地方也請大家在評論下指出。 選擇排序就這么簡單 從上一篇已經(jīng)講解了冒泡排序了,本章主要講解的是選擇排序,希望大家看完能夠理解并手寫出選擇排序的代碼,然后就通過面試了!如果我寫得有錯誤的地方也請大家在評論下指出。 選擇排序介紹和穩(wěn)定性說明...

    wua_wua2012 評論0 收藏0
  • HashMap就是這么簡單【源碼剖析】

    前言 聲明,本文用得是jdk1.8 前面已經(jīng)講了Collection的總覽和剖析List集合以及散列表、Map集合、紅黑樹的基礎(chǔ)了: Collection總覽 List集合就這么簡單【源碼剖析】 Map集合、散列表、紅黑樹介紹 本篇主要講解HashMap,以及涉及到一些與hashtable的比較~ 看這篇文章之前最好是有點數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ): Java實現(xiàn)單向鏈表 棧和隊列就是這么簡單 二叉樹就...

    entner 評論0 收藏0
  • 遞歸就這么簡單

    摘要:那么,有了循環(huán),為什么還要用遞歸呢在某些情況下費波納切數(shù)列,漢諾塔,使用遞歸會比循環(huán)簡單很多很多話說多了也無益,讓我們來感受一下遞歸吧。 遞歸介紹 本來預(yù)算此章節(jié)是繼續(xù)寫快速排序的,然而編寫快速排序往往是遞歸來寫的,并且遞歸可能不是那么好理解,于是就有了這篇文章。 在上面提到了遞歸這么一個詞,遞歸在程序語言中簡單的理解是:方法自己調(diào)用自己 遞歸其實和循環(huán)是非常像的,循環(huán)都可以改寫成遞歸...

    dreamtecher 評論0 收藏0
  • 【Java實現(xiàn)】棧隊列就是這么簡單

    摘要:一前言上一篇已經(jīng)講過了鏈表實現(xiàn)單向鏈表了,它跟數(shù)組都是線性結(jié)構(gòu)的基礎(chǔ),本文主要講解線性結(jié)構(gòu)的應(yīng)用棧和隊列如果寫錯的地方希望大家能夠多多體諒并指正哦,如果有更好的理解的方式也希望能夠在評論下留言,讓大家學(xué)習(xí)學(xué)習(xí)二數(shù)據(jù)結(jié)構(gòu)棧就是這么簡單數(shù)據(jù)結(jié)構(gòu) 一、前言 上一篇已經(jīng)講過了鏈表【Java實現(xiàn)單向鏈表】了,它跟數(shù)組都是線性結(jié)構(gòu)的基礎(chǔ),本文主要講解線性結(jié)構(gòu)的應(yīng)用:棧和隊列 如果寫錯的地方希望大家...

    Ethan815 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<