循序漸進(jìn)學(xué)java-創(chuàng)新互聯(lián)

/-matool API查詢網(wǎng)站

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:空間域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、淮北網(wǎng)站維護(hù)、網(wǎng)站推廣。

重點內(nèi)容:

第一階段:

變量:數(shù)據(jù)類型

運算符:二進(jìn)制

控制結(jié)構(gòu):循環(huán)

數(shù)組排序和查找:數(shù)組

面向?qū)ο缶幊蹋撼蓡T方法,成員方法傳參機(jī)制,構(gòu)造器

面向?qū)ο缶幊蹋ㄖ屑墸悍庋b,繼承,多態(tài)

第二階段:

面向?qū)ο缶幊蹋ǜ呒墸侯愖兞亢皖惙椒?,接口,?nèi)部類

Exception:異常體系圖,異常處理

常用類:string,stringbuffer,stringbuilder

集合:

泛型:自定義泛型

線程:線程使用,Synchronized,互斥鎖

IO流:輸入流,輸出流

開發(fā)注意事項:

1一個源文件中最多只能有一個public類,其他類的個數(shù)不限

2如果源文件包含一個public類,則文件名必須按該類名命名

3.一個源文件中最多只能有一個public類。其它類的個數(shù)不限,也可以將main方法寫在非public類中,然后指定運行非public類,這樣入口方法就是非public的main方法

/r為回車:回車后光標(biāo)會回到“韓”字前,然后“韓順”被“北京”代替

使用tab鍵,實現(xiàn)縮進(jìn),整體右移。Shift+tab整體左移。

相對路徑和絕對路徑:

加號的說明:

兩邊都是數(shù)值型的時候做加法運算,左右兩邊有一方為字符串時做拼接運算

基本數(shù)據(jù)類型:

+byte

使用long類型時,需要在變量后面加一個‘l’或“L“

例:long a = 10l;

Java默認(rèn)浮點型常量為double型,因此在使用float型時需要在變量后面加上l或L

例:floa a = 1.1l;

浮點型可以寫成.123 等價于0.123

對于運算結(jié)果時小數(shù)的進(jìn)行判斷時,應(yīng)該用兩個數(shù)的差值的絕對值,在某個精度范圍內(nèi)判斷。

不同的字符編碼表之間有所不同:

ASCII編碼表:一個字符一個字節(jié)

Unicode編碼表:字母和漢字都占用兩個字節(jié)(最多編碼2的16次方個字符)

utf-8:字母一個字節(jié),漢字三個字節(jié)

等等。

布爾類型(boolean):賦值只能為true/false

在將精度(容量)大的數(shù)據(jù)類型轉(zhuǎn)換成精度(容量)小的數(shù)據(jù)類型時會報錯。

(Byte,short)和char之間不能相互轉(zhuǎn)換,也不能自動轉(zhuǎn)換

Byte,short,char之間或者同類型之間進(jìn)行運算時,會轉(zhuǎn)換為int類型。

Boolean不參與類型的自動轉(zhuǎn)換。

字符串和其它數(shù)據(jù)類型之間的轉(zhuǎn)換:

其它類型轉(zhuǎn)字符串:+“”

字符串轉(zhuǎn)其它類型:

取模:a % b =a-a/b*a;

結(jié)果的正負(fù)值要取決于a的負(fù)號。

重點:

關(guān)系運算符的運算結(jié)果為布爾類型:即ture或false

短路與:&& 邏輯與:&

對于短路與,如果第一個條件為假,則后面的條件不再判斷,即不執(zhí)行,效率高

對于邏輯與,如果第一個條件為假,后面的語句仍會執(zhí)行

短路或:|| 邏輯或:|

效果同短路與和邏輯與

^:邏輯異或

復(fù)合賦值運算符會進(jìn)行類型轉(zhuǎn)換

byte b = 3;

b +=2;等價于b = (byte)(b+2);

輸入的實現(xiàn):

1引入java.util.Scanner,java.util下的Scanner類

2.創(chuàng)建一個類的對象,new創(chuàng)建對象

Scanner myScanner = new Scanner(System.in);

3.接收

String name = myScanner.next();輸入為字符串類型

int age = myScanner.nextInt();輸入為整形

double salary = myScanner.nextDouble();輸入為浮點型

四種進(jìn)制:

二進(jìn)制:以O(shè)B或Ob開頭

八進(jìn)制:以數(shù)字0開頭

十六進(jìn)制:以O(shè)X或Ox開頭 ,并且A-F不區(qū)分大小寫

按位與:&

按位或:|

按位異或:^

按位取反:~

位運算符:

>>算數(shù)左移:地位補0

<<算數(shù)右移:高位補符號位

>>>邏輯右移:地位溢出,高位補0

沒有邏輯左移

switch:返回類型必須是byte,short,int,char,enum,String類型之一。

case:值必須為常量或者常量表達(dá)式

break后面加標(biāo)簽:可以表示終止某個循環(huán),類似于goto

判斷兩個字符串:推薦第二種

如:String name;

Name.equals(“字符串內(nèi)容”)或”字符串內(nèi)容”.equals(name)

數(shù)組:

數(shù)組類型[ ] 數(shù)組名 ([ ])= new 數(shù)組類型[個數(shù)]

double[] score = new double[5];

double score[];

score = new double[5];

數(shù)組賦值:arr2是arr1的一份拷貝,當(dāng)arr2改變時,arr1也改變

冒泡排序:優(yōu)化:j初始值為1,增加count變量,若執(zhí)行一次交換則count增加,若count在循環(huán)后為0則提前終止循環(huán)。

動態(tài)開辟二維數(shù)組空間:

面向?qū)ο螅ɑA(chǔ)):

對象中的整型放在堆區(qū),字符串類型放在方法區(qū)中的常量池。

過程:

1先加載類信息(屬性和方法信息,只會加載一次)

2在堆中分配空間,進(jìn)行默認(rèn)初始化

3把地址賦給用類創(chuàng)建的變量,變量指向?qū)ο?/p>

4.進(jìn)行指定初始化

方法重載:減輕記名麻煩

要求:方法名相同,形參的類型或個數(shù)或順序不同。

注意:返回類型不同不能構(gòu)成重載。

可變參數(shù),寫法(變量類型... 變量名)

可以接受0-多個參數(shù),此時的變量名相當(dāng)于數(shù)組名,可以用變量名.length獲得參數(shù)個數(shù),用變量名[i]訪問每個變量。

細(xì)節(jié):

可變參數(shù)的實參可以為數(shù)組,即直接傳入一個數(shù)組。

可以同時存在普通類型的參數(shù)和可變參數(shù),但是可變參數(shù)必須在最后。

一個形參列表中只能出現(xiàn)一個可變參數(shù)。

作用域細(xì)節(jié):

屬性和局部變量可以重名,訪問時遵循就近原則。如:

此時name的值為“king”

全局變量可以加修飾符

局部變量不能加修飾符

構(gòu)造方法/構(gòu)造器:完成對新對象的初始化,類似于構(gòu)造函數(shù)

細(xì)節(jié):

一個類可以定義多個構(gòu)造器,即構(gòu)造器重載

This指針:當(dāng)構(gòu)造方法中的形參的類的對象名字相同時,可以在對象前加this.來區(qū)分

在一個構(gòu)造器中訪問另一個構(gòu)造器時(本類),需要使用this(參數(shù)列表)

注意:需要將this語句放在第一條語句,只能在構(gòu)造器中使用。

在需要獲取數(shù)組的大值時,為了避免傳入的數(shù)組為空值,或者數(shù)組地址為null時,需要加上判斷,當(dāng)?shù)刂窞閚ull時,arr.length語句會報錯。

直接new 類名(),此方法只創(chuàng)建一個對象,而沒有返回,屬于匿名對象,匿名對象在使用后,就不能使用。

IDEA中的快捷鍵:

Ctrl+D 刪除當(dāng)前行(自己配置)

Alt+/ 補全代碼

Ctrl+alt+l 格式化代碼

Alt+r 運行程序(自己配置)

將光標(biāo)放在方法上,ctrl+B(或鼠標(biāo)左鍵)可以定位到方法

模板快捷鍵:

Fori,輸出for循環(huán)

Sout,輸出System.out.println語句

創(chuàng)建不同的文件夾來保存類文件

方法如下:

命名規(guī)則:不能以數(shù)字開頭,不能是關(guān)鍵字或保留字。

命名規(guī)范:com.公司名.項目名.業(yè)務(wù)模塊名

如:

Arrays.sort(數(shù)組名),對數(shù)組進(jìn)行升序排列。

Package的作用是聲明當(dāng)前類所在的包,需要放在類(或者文件)的最上面。

類只能用public和默認(rèn)來修飾。

類的成員方法和屬性可以用四個來修飾。

封裝:

可以隱藏實現(xiàn)細(xì)節(jié)

可以對數(shù)據(jù)進(jìn)行驗證,保證安全合理

實現(xiàn):

將屬性私有化

提供一個公共的set方法,用于修改私有屬性的值

提供一個公共的get方法,用于獲取私有屬性的值

構(gòu)造器也同樣需要對數(shù)據(jù)進(jìn)行檢測,因此可以把set方法寫入構(gòu)造器中,實現(xiàn)對數(shù)據(jù)賦值的同時完成驗證。

繼承:

可以解決代碼復(fù)用。

基本語法:

class 子類(派生類) extends 父類(基類){}

細(xì)節(jié):

子類必須調(diào)用父類的構(gòu)造器,完成對父類的初始化

子類在調(diào)用構(gòu)造器時,會自動調(diào)用父類的無參構(gòu)造器,super語句(被隱藏)

若父類中無無參構(gòu)造器,則需要用super語句指定構(gòu)造器

super()和this()都只能放在構(gòu)造器第一行,因此這兩個方法不能共存在一個構(gòu)造器。

Object類時所有類的基類

父類構(gòu)造器的調(diào)用不限于直接父類!將一直追溯到Object類,即父類的父類的無參構(gòu)造器也會被調(diào)用等。

Java中是單繼承機(jī)制,即一個類只能繼承一個,可以用A繼承B,B繼承C,來實現(xiàn)A同時繼承B和C。

繼承訪問:

此時aa.name的值為大頭兒子,aa.hobby的值為旅游:以此方法在訪問變量時,會從當(dāng)前類開始尋找,若當(dāng)前類沒有,會依次往上尋找,直到找到為止或報錯。

此時aa.age會報錯,在Father類中有age但是沒有權(quán)限,不會再往上尋找。

Super的使用:(訪問父類)

super.語句,訪問父類屬性和方法,private屬性除外

訪問父類構(gòu)造器

語句:super();

方法重寫(覆蓋):

實現(xiàn)條件:子類和父類的方法,參數(shù),方法名均相同。此時子類的方法覆蓋父類的方法。

1返回類型可以相同,或者子類的返回類型是父類返回類型的子類。如:

String是Object的子類

2子類方法不能縮小父類方法的訪問權(quán)限。

錯誤示例:子類是protected,父類是public。

多態(tài):

方法的多態(tài):體現(xiàn)在方法的重載和重寫

對象的多態(tài):

一個對象的編譯類型和運行類型可以不一致。

編譯類型看定義時 = 號的左邊,運行類型看 = 號的右邊

animal1的編譯類型時animal,運行類型時cat。

此時animal1.cry()相當(dāng)于cat.cry(),因為animal的運行類型時cat。

重新指定后:

animal1的編譯類型依然是animal,運行類型變?yōu)閐og。

細(xì)節(jié):

1向上轉(zhuǎn)型:父類的引用指向了子類的對象。如上圖舉例。

2向下轉(zhuǎn)型:

animal可以通過強轉(zhuǎn)再次變成cat類型,因為animal本身在編譯后為cat類型,但是不能轉(zhuǎn)換成dog類型。

屬性沒有重寫之說!屬性的值看編譯類型,如下圖輸出結(jié)果為10.

Instaniof語句,用于判斷對象的運行類型是否是XX類型或其子類型。

動態(tài)綁定機(jī)制:

1當(dāng)調(diào)用對象方法的時候,改方法會和該對象的內(nèi)存地址/運行類型綁定

2當(dāng)調(diào)用對象屬性時,沒有動態(tài)綁定機(jī)制,哪里聲明哪里使用

多態(tài)數(shù)組:如

Object類:

==運算符:判斷兩個值是否相等,或是兩個地址是否相同

equals是Object類中的方法,只能判斷引用類型地址

查看方法源碼:ctrl+左鍵

注意:

在Object子類中往往重寫改方法,用于判斷內(nèi)容是否相等。

HashCode方法:

1提高具有哈希結(jié)構(gòu)的容器的效率

2兩個引用,如果指向的是同一個對象,則哈希值肯定是一樣的,如果不是,則哈希值肯定不一樣。

3哈希值主要根據(jù)地址號來,但是不完全等價于地址

Tostring方法:

方法重寫后:把對象的屬性輸出,也可以自己修改

直接用sout輸出一個對象等價于sout 對象名.toString

Debug斷點調(diào)試:可以在調(diào)試過程中加斷點

F8逐行執(zhí)行

F7跳入方法(查看方法)

Shift+F8跳出方法

F9直接跳到下一個斷點

零錢通:

日期顯示:

類變量:

用static修飾的變量,是類共有的變量,可以通過類名來訪問。同時需要遵守訪問修飾符的權(quán)限。

類方法和類變量相似。

細(xì)節(jié):

類方法中不能使用和對象有關(guān)的關(guān)鍵字,如this和super。

類方法只能訪問靜態(tài)變量或靜態(tài)方法。

要在靜態(tài)方法中訪問,非靜態(tài)方法或變量的話,可以通過在靜態(tài)方法中new一個類,通過類訪問非靜態(tài)成員。

main方法:

由java虛擬機(jī)調(diào)用,而虛擬機(jī)所在為不同類,因此為public

Java虛擬機(jī)在執(zhí)行main方法時,不必創(chuàng)建對象,所以為static

Java執(zhí)行的程序,參數(shù)1,參數(shù)2,參數(shù)3,作為三個字符串?dāng)?shù)組傳入args數(shù)組中

代碼塊:

(修飾符(static)){

代碼

}(;)

代碼塊在構(gòu)造器被調(diào)用時優(yōu)先執(zhí)行。

當(dāng)有static修飾時,代碼塊隨著類的加載而執(zhí)行,并且只會執(zhí)行一次

普通代碼塊:在對象創(chuàng)建時執(zhí)行(new)

類的加載:在創(chuàng)建對象實例時(new)

創(chuàng)建子類對象實例,父類也會被加載(父類先加載)

使用類的靜態(tài)成員時

創(chuàng)建對象時:在一個類中調(diào)用順序:

(1)使用new創(chuàng)建對象之后,靜態(tài)代碼塊和靜態(tài)屬性初始化調(diào)用的優(yōu)先級一樣,哪個在前先調(diào)用哪個,如上圖先調(diào)用靜態(tài)代碼塊。多個靜態(tài)代碼塊和多個靜態(tài)屬性初始化的調(diào)用順序同樣。

(2)普通代碼塊和普通對象初始化,順序同上

(3)調(diào)用構(gòu)造方法

構(gòu)造器代碼順尋:

(1).父類構(gòu)造器

(2)本類代碼塊

(3)本類構(gòu)造器代碼

總結(jié):先執(zhí)行靜態(tài)(先父類后子類),再普通(先父類后子類)。

靜態(tài)代碼塊只能調(diào)用靜態(tài)成員,普通代碼塊可以調(diào)用任意成員。

單例模式-餓漢式:

1將構(gòu)造器私有化

2在類的內(nèi)部直接創(chuàng)建

3提供一個公共的static方法,返回對象

缺點:創(chuàng)建了對象但是沒有使用,造成資源浪費

單例模式-餓漢式:

1構(gòu)造器私有化

2定義一個static靜態(tài)對象

3提供一個public的static方法,可以返回一個對象

4當(dāng)用戶使用getInstacnce時才返回對象,再次使用時返回同一個對象。

final關(guān)鍵詞:

1可以用來修飾類:使類無法被繼承(不希望被其中方法被重寫)

2修飾方法,使方法無法被改寫

3修飾屬性,使屬性無法被修改

4修飾局部變量,使無法被修改

細(xì)節(jié):

1被final修飾的變量,需要在進(jìn)行初始化,如在定義時,通過構(gòu)造器,通過代碼塊

如果還有static修飾,則不能在構(gòu)造器中賦值(代碼塊為靜態(tài))

2.final不能修飾構(gòu)造器

3..final和static搭配使用,效率更高,不會導(dǎo)致類加載

4.包裝類都是final類型,如String

抽象類:

當(dāng)父類的一些方法不能確定時,用abstra修飾該方法。

  1. 用abstra修飾的方法沒有方法體

  1. 抽象類不能被實例化(不能通過new的方式創(chuàng)建)

  1. 抽象類可以沒有抽象方法,有抽象方法的類必須是抽象類

  1. abstra只能修飾類和方法

  1. 抽象類本質(zhì)還是類,可以有任意成員

  1. 當(dāng)一個類繼承抽象類后,它本身必須是一個抽象類或者實現(xiàn)父類中所有的抽象方法

  1. 抽象方法不能被private,final,static關(guān)鍵詞修飾

接口:

interface 接口名{}

class 類名 implements 接口{

自己的屬性

自己的方法:

必須實現(xiàn)的接口的抽象方法

}

細(xì)節(jié):

  1. 接口不能被實例化(即new)

  1. 接口中的方法都是public方法,抽象方法可以不用abstra修飾

  1. 一個普通類實現(xiàn)接口,必須將改接口所有方法實現(xiàn),可以使用alt+enter

  1. 抽象類去實現(xiàn)接口時,可以不實現(xiàn)接口的抽象方法

  1. 一個類可以實現(xiàn)多個接口

  1. 接口中的屬性都是public static final 修飾符

  1. 接口可以繼承接口,不能繼承類

  1. 接口的修飾符只能是public或者默認(rèn),和類相同

接口可以解決單繼承的問題

內(nèi)部類:

  1. 局部內(nèi)部類:

即在類中的一個方法中的類,該類可以直接訪問外部類所有的成員(包括私有),不能使用修飾符(本質(zhì)上是局部變量),但是可以用final修飾

作用域:僅僅在定義它的方法或代碼塊中。

外部類在方法中可以創(chuàng)建內(nèi)部類對象,然后調(diào)用成員

當(dāng)外部類和內(nèi)部類的成員重名時,訪問時默認(rèn)遵循就近原則,可以通過外部類.this.成員,來訪問

匿名內(nèi)部類:

是一個類,同時是一個對象。是一個局部變量。

作用:簡化開發(fā)

匿名內(nèi)部類的本質(zhì)是一個匿名類繼承一個類或者實現(xiàn)一個接口

第二個演示表示匿名內(nèi)部類是一個對象。

匿名內(nèi)部類可以當(dāng)作實參直接傳遞

創(chuàng)建內(nèi)部成員類的方法:

2.

靜態(tài)內(nèi)部類:

是類的成員,遵循相同的訪問規(guī)則。

枚舉:

將構(gòu)造器私有化,刪掉set方法,將定義常量對象寫在前面。

細(xì)節(jié):

創(chuàng)建枚舉對象時,自動繼承了Enum類。

成員必須放在前面,且用逗號隔開,最后一個用分號。

如果調(diào)用的構(gòu)造器是無參時,“()”可以省略。

Enum的成員方法:

name()返回成員名稱

ordinal()返回成員序號(從0開始)

values()返回成員數(shù)組

可以通過增強for循環(huán)來實現(xiàn)遍歷

valueOf(“常量名”),在枚舉中尋找該常量名

常量1.compare To(常量2),返回得到常量1的編號減常量2的編號。

注解:

如:重寫方法上的@Override

只能用在方法上,可以刪掉,加上后編譯器會檢驗方法是否被重寫。

@Deprecated

可以修飾方法,類,字段,參數(shù)等到,用于做版本升級過渡

@SuppressWarnings

用于抑制警告,可以使用@ SuppressWarnings({“all“})抑制所有警告,也可以換成其它類型用于抑制相應(yīng)類型的警告。

異常處理:

當(dāng)程序出現(xiàn)一個異常后,可以讓程序繼續(xù)向下執(zhí)行

使用ctrl+alt+t對可能出現(xiàn)異常的代碼塊進(jìn)行異常處理。

細(xì)節(jié):

當(dāng)異常發(fā)生時,異常后面的代碼不再執(zhí)行,直接跳入catch代碼塊中

如果異常沒有發(fā)生,則catch代碼塊不執(zhí)行

finall代碼塊無論如何都會執(zhí)行

可以沒有catch,只有try和finally,此時若發(fā)生異常,程序會在執(zhí)行完finally后結(jié)束。

Finally代碼塊必須執(zhí)行,雖然在catch中返回3

Throws:

Throws的對象可以是異常類型本身也可以是它的父類

子類在重寫父類的方法時,拋出的異常類型要么和父類一致,要么是父類所拋出異常的子類異常

包裝類:

精度提升,三元運算符是一個整體

包裝類的轉(zhuǎn)換

包裝類中的方法:

String類

String類有很多構(gòu)造器:

用finally修飾的變量指向的地址不可改變。

當(dāng)常量池中有變量時

String字符串特性:

該語句創(chuàng)建了兩個對象(若常量池中無haha)

說明:String時一個finally類,其內(nèi)容不可改變。

編譯器會優(yōu)化:判斷創(chuàng)建的常量池對象是否有引用的指向

等價于 Sting a = “helloabc”;

String 中的intern方法:

如果池中有“s1+s2“字符串,則返回該字符串的地址,若沒有則創(chuàng)建一個該字符串

常用方法:

示例:如果找不到,則返回-1;第一次出現(xiàn)的位置??梢哉易址?/p>

從下標(biāo)6開始截取字符串

前閉后開截取字符串

示例:

注意:原字符串沒有被替換

StringBuffer:

直接父類:AbstractStringBuilder

父類中有屬性 char[] value 不是final類型

StringBuffer是一個finally類,不能被繼承

String轉(zhuǎn)StringBuffer

StringBuffer轉(zhuǎn)String

StringBuffer中的方法:

如果要對String進(jìn)行大量修改,就不要使用String,考慮StringBuffer,如果是單線程同時考慮StringBuilder

Math方法:

round為四舍五入保留整數(shù)

Arrays類:

如果傳入的值為負(fù)數(shù),則會報錯

System方法:

System.exit(0)

0表示程序正常退出

Src:原數(shù)組

0:從原數(shù)組開始拷貝的位置

Dest:目的數(shù)組

0:從目的數(shù)字開始拷貝的位置

處理大數(shù)和需要保持高精度計算時使用

Date:

Calendar:

Local:

集合:

ArrayList演示:

迭代器:

List接口:

  1. 集合中的元素有序,且可以重復(fù)

  1. 每個元素都有對應(yīng)的索引

  1. 可以根據(jù)其索引號來獲取元素

ArraysList:

1.ArrayList基本等同于vector,效率高,但是不安全

2.ArrayList中維護(hù)了一個Object類型的數(shù)組

Transient表示該屬性不會被序列化

  1. 當(dāng)創(chuàng)建ArrayList對象時,如果用的是無參構(gòu)造器,則初始容量為0,第一次添加時數(shù)組擴(kuò)容為10,如果需要再次擴(kuò)容則擴(kuò)容為當(dāng)前容量的1.5倍。

  1. 如果使用指定大小的構(gòu)造器,則在需要再次擴(kuò)容則擴(kuò)容為當(dāng)前容量的1.5倍。

Vector:

  1. 底層依然是一個可變的數(shù)組

  1. 安全,但是效率不高

  1. 如果是無參,則在第一次添加后擴(kuò)容為10,以后每次需要擴(kuò)容為當(dāng)前的2倍

ArrayList和LinkList都是不安全的

Set接口:

  1. 無序,沒有索引

  1. 不允許重復(fù)元素

雖然取出的順序不是添加的順序,但是順序是固定的。

可以用迭代器和增強for循環(huán)進(jìn)行遍歷,不能用普通for循環(huán),因為沒有g(shù)et方法

HashSet底層是hashmap,是一個數(shù)組加鏈表的結(jié)構(gòu)

  1. 再添加一個元素時,先得到hash值,然后轉(zhuǎn)換成索引值。

  1. 根據(jù)索引值存放到數(shù)組對應(yīng)的位置

  1. 若對應(yīng)的位置已有元素,則調(diào)用equals方法與元素進(jìn)行比較,如果相同則放棄添加,如果不相同則添加到最后。

  1. 當(dāng)一條鏈表的元素個數(shù)超過8以后,并且table的大小>=64,就會進(jìn)行樹化。

  1. 當(dāng)添加的元素個數(shù)大于閾值(當(dāng)前數(shù)組大小的0.75倍,數(shù)組初始化大小為16)時,數(shù)組會進(jìn)行擴(kuò)容,擴(kuò)大為原來的兩倍,同時閾值也會擴(kuò)大為2倍。

Map:

  1. 保存具有映射關(guān)系的數(shù)據(jù)

  1. Key和value可以是任何引用類型的數(shù)據(jù),會封裝到HashMap$Node對象中

  1. Key不允許重復(fù),否則會覆蓋

  1. Key和value都可以為null,但是key只能有一個,value可以有多個

5.k-v最后是HashMap$Nodenode = newNode(hash,key,value,null)

6.為了方便程序員遍歷,還會創(chuàng)建EntrySet集合,該集合存放的元素的類型Entry,而一個Entry對象就有k,v,EntrySet>

7.entrySet中定義的類型是Map.Entry,但是實際上存放的還是HashMap$Node,因為Node實現(xiàn)了Map.Entry

8.當(dāng)把HashMap$Node對象存放到EntrySet就方便我們的遍歷,因為Map.Entry提供了重要的方法:getKey和getValue

遍歷方式:

HashTable:

  1. 鍵和值都不能為空,否則會拋出異常

  1. 使用方法基本和HashMap一樣

  1. 每次擴(kuò)容變?yōu)樵萘康?倍+1,初始容量為11

Properties:

Treeset:有序,可以自定義

自定義比較器的作用:決定了數(shù)據(jù)的順序,同時決定了數(shù)據(jù)能否被添加進(jìn)去的規(guī)則,如上圖:以長度升序排列字符串,如果有長度相同的情況則無法添加

Collection工具類:

下面的代碼會報錯,原因是在底層要嘗試把加進(jìn)去的對象轉(zhuǎn)換成Comparable,對象沒有實現(xiàn)comparable接口,因此會有轉(zhuǎn)換類型的異常。

泛型:

1.為了約束數(shù)據(jù)類型

2.省去轉(zhuǎn)型的麻煩

約束加入的類型只能為Dog

不用再向下轉(zhuǎn)型

用來解決數(shù)據(jù)的安全性問題

作用:可以在類聲明時通過一個表示表示類中的某個屬性,或是某個方法的返回類型,或是參數(shù)類型

泛型使用細(xì)節(jié):

1.泛型指向的數(shù)據(jù)類型要求是引用類型,不能是基本數(shù)據(jù)類型。如:

Int是基本數(shù)據(jù)類型

2.在指定泛型后,傳入的數(shù)據(jù)類型可以是其本身。也可以是其子類

3.使用形式:后面的括號里的內(nèi)容可以省略,推薦這種寫法

4.如果沒有指定泛型,則默認(rèn)為Object類型

自定義泛型:

1.泛型標(biāo)識符可以有多個,一般都是大寫字母

2.普通成員(屬性,方法)可以使用泛型

3.使用泛型的數(shù)組不能初始化(因為數(shù)組在new時,不能確定類型,因此無法開辟空間)

4.靜態(tài)方法中不能使用泛型(靜態(tài)方法在類加載時,對象還未創(chuàng)建,無法完成初始化)

自定義泛型接口:

1.接口中,靜態(tài)成員不能使用泛型

2.泛型接口的類型,在繼承接口或?qū)崿F(xiàn)接口時確定

3.沒有指定類型,默認(rèn)為Object

泛型在方法中的使用:

1.泛型方法可以定義在普通類中,也可以定義在泛型類中

2.當(dāng)泛型方法被調(diào)用時,類型會確定

3.泛型方法,可以使用類聲明的泛型類型,也可以使用自己聲明的泛型

4.注意泛型方法和方法使用了泛型的區(qū)別

形如:

R要在參數(shù)中使用,在調(diào)用方法時,會根據(jù)傳入的參數(shù)的類型,變化R的類型

Say1方法使用了泛型

Say2方法是泛型方法,同時也使用了泛型

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

名稱欄目:循序漸進(jìn)學(xué)java-創(chuàng)新互聯(lián)
文章路徑:http://muchs.cn/article30/csgipo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、電子商務(wù)、軟件開發(fā)、移動網(wǎng)站建設(shè)微信公眾號、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司