筆記(一 )——Java零碎知識摘錄

——》個人平時(shí)筆記,看到的同學(xué)歡迎指正錯誤考榨,文中多處摘錄于各大博主精華、書籍

解釋型語言:雖然Java代碼是要先編譯再運(yùn)行的河质,但是Java代碼編譯之后生成的并不是計(jì)算機(jī)可識別的二進(jìn)制文件震叙,而是一種特殊的class文件散休,這種class文件只有Java虛擬機(jī)(Android中叫ART,一種移動優(yōu)化版的虛擬機(jī))才能識別溃槐,而這個Java虛擬機(jī)擔(dān)當(dāng)?shù)钠鋵?shí)就是解釋器的角色科吭,它會在程序運(yùn)行時(shí)將編譯后的class文件解釋成計(jì)算機(jī)可識別的二進(jìn)制數(shù)據(jù)后再執(zhí)行,因此对人,準(zhǔn)確來講,Java屬于解釋型語言而非編譯型語言姻几。

1势告、android:exported屬性:主要作用是:是否支持其它應(yīng)用調(diào)用當(dāng)前組件。默認(rèn)值:如果包含有intent-filter 默認(rèn)值為true; 沒有intent-filter則默認(rèn)值為false咱台。雖然說加了這個屬性,可以使該組件不被其他的程序調(diào)用春贸。但是遗遵,需要注意的是,如果兩個程序的userid是一樣的話允粤,exported=”false”會失效翼岁。

2、 java反射:JAVA反射機(jī)制是在運(yùn)行狀態(tài)中阔挠,對于任意一個類,都能夠知道這個類的所有屬性和方法购撼;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性迂求;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機(jī)制。即:java在運(yùn)行狀態(tài)中反射知道一個類里面的所有方法和屬性毫玖;通過反射獲得對象后凌盯,能夠調(diào)用對象的任意屬性和方法。

java內(nèi)什病:內(nèi)省基于反射實(shí)現(xiàn)县忌,主要用于操作JavaBean,通過內(nèi)省 可以獲取bean的getter/setter装获,只要看到有g(shù)etter或者setter就認(rèn)為這個類有那么一個字段,比如看到getName() 內(nèi)省就會認(rèn)為這個類中有name字段穴豫,但事實(shí)上并不一定會有name走芋。

image

3、泛型肋杖,即“參數(shù)化類型”挖函。一提到參數(shù),最熟悉的就是定義方法時(shí)有形參怨喘,然后調(diào)用此方法時(shí)傳遞實(shí)參。參數(shù)化類型就是將類型由原來的具體的類型參數(shù)化肉拓,類似于方法中的變量參數(shù)梳庆,此時(shí)類型也定義成參數(shù)形式(可以稱之為類型形參)卑惜,然后在使用/調(diào)用時(shí)傳入具體的類型(類型實(shí)參)驻售,由傳入的實(shí)參類型決定的參數(shù)類型。在方法中使用通配符“毫痕?”作為形參迟几,實(shí)則它的使用是一種類型實(shí)參,此時(shí)“瘤旨?”可以理解為說有類型實(shí)例的父類,就是一種真實(shí)的類型。
java 泛型詳解-絕對是對泛型方法講解最詳細(xì)的七婴,沒有之一

public void showKeyValue1(Generic<?> obj){
 
     Log.d("泛型測試","key value is " + obj.getKey());
 
 }

image

4、 泛型通配符“修肠?”(泛型詳解)

“ ? ”是通配符,泛指所有類型:一般用于定義一個引用變量,這么做的好處是,如下所示,定義一個sup的引用變量户盯,就可以指向多個對象。

 SuperClass<?> sup = new SuperClass<String>("lisi");

       sup = new SuperClass<People>(new People());
 
       sup = new SuperClass<Animal>(new Animal());
 
 若不用?,用固定的類型的話吗伤,則:
> 
> SuperClass<String> sup1 = new SuperClass<String>("lisi");
> 
> SuperClass<People> sup2 = new SuperClass<People>("lisi");
> 
> SuperClass<Animal> sup3 = new SuperClass<Animal>("lisi");

這就是?通配符的好處。

? extends T足淆, ?是指T類型或T的子類型

? super T ,?是指T類型或T的父類型

這個兩個一般也是和?一樣用在定義引用變量中礁阁,但是傳值范圍不一樣

T和?運(yùn)用的地方有點(diǎn)不同,?是定義在引用變量上,T是類上或方法上丹鸿;如果有泛型方法和非泛型方法,都滿足條件,會執(zhí)行非泛型方法。

帶不同泛型的ArrayList在編譯后生成的Class是相同的靠欢!也就是說,泛型在編譯生成字節(jié)碼文件時(shí)會被”擦除”掺涛;不管ArrayList<E>帶什么泛型,在編譯后都是ArrayList所對應(yīng)的字節(jié)碼文件薪缆。

eg:

image

5、Java 如何有效地避免OOM:善于利用軟引用和弱引用

強(qiáng)引用:直接的對象引用疼电,實(shí)例化對象。在內(nèi)存不足的情況下蔽豺,JVM寧愿拋出OutOfMemory錯誤也不會回收這種對象拧粪。中斷強(qiáng)引用和某個對象之間的關(guān)聯(lián),可以顯示地將引用賦值為null魄鸦,這樣一來的話,JVM在合適的時(shí)間就會回收該對象拾因。在方法內(nèi)部有一個強(qiáng)引用旷余,這個引用保存在 java棧 中,而真正的引用內(nèi)容 (Object)保存在 java 堆中正卧。當(dāng)這個方法運(yùn)行完成后,就會退出方法棧穗酥,則引用對象的引用數(shù)為 0 ,這個對象會被回收砾跃。

軟引用:有用但并不是必需的對象,在Java中用java.lang.ref.SoftReference類來表示判耕。當(dāng)一個對象只有軟引用存在時(shí)翘骂,系統(tǒng)內(nèi)存不足時(shí)此對象會被JVM回收帚豪。一般用于服務(wù)端草丧。

弱引用:弱引用也是用來描述非必需對象的,當(dāng)JVM進(jìn)行垃圾回收時(shí)昌执,無論內(nèi)存是否充足,都會回收被弱引用關(guān)聯(lián)的對象懂拾。在java中,用java.lang.ref.WeakReference類來表示檬果。只要JVM進(jìn)行垃圾回收滑负,被弱引用關(guān)聯(lián)的對象必定會被回收掉。移動端內(nèi)存緊缺推薦使用弱引用栗涂。

虛引用:虛引用和前面的軟引用、弱引用不同斤程,它并不影響對象的生命周期菩混。在java中用java.lang.ref.PhantomReference類表示。如果一個對象與虛引用關(guān)聯(lián)疚脐,則跟沒有引用與之關(guān)聯(lián)一樣邢疙,在任何時(shí)候都可能被垃圾回收器回收

在使用軟引用和弱引用的時(shí)候疟游,我們可以顯示地通過System.gc()來通知JVM進(jìn)行垃圾回收,但是要注意的是颁虐,雖然發(fā)出了通知,JVM不一定會立刻執(zhí)行儒陨,也就是說這句是無法確保此時(shí)JVM一定會進(jìn)行垃圾回收的。

6蹦漠、try catch是直接處理,處理完成之后程序繼續(xù)往下執(zhí)行隘击;throw則是將異常拋給它的上一級處理(是明確的一定會拋出異常)喘沿,程序便不往下執(zhí)行了。

throws并不是拋出一個實(shí)際的Exception而是一個異常聲明蚜印,它聲明這個方法可能會拋出一個異常,注意是可能窄赋,所以在沒有異常的情況下也是可以用throws的,而throws本身的作用也是用來提高程序的健壯性浩峡,反過來错敢,如果這個方法的的確確的有一個異常,那么編譯器會強(qiáng)制讓你加上throws這個異常聲明稚茅。

try這個程序塊名字很易懂,就是嘗試咽块,嘗試能不能正常的走完整個作用域欺税,所以我們在try塊里經(jīng)常放上可能會拋出異常的程序段。而catch恰好就是處理try里拋出來的異常晚凿,其中catch的參數(shù)列表接收的是一個異常的引用,是throw拋出來的異常的引用皆撩,這樣我們就可以得到這個異常的對象,倒不如說我們是得到了這個異常對象的引用扛吞,因?yàn)樵趈ava里,通常我們也只能通過引用來操縱對象亚脆。

7盲泛、一個類只能初始化一次,卻可以多次實(shí)例化寺滚。java虛擬機(jī)類加載機(jī)制

類的初始化的執(zhí)行順序

》沒有父類的情況:

類的靜態(tài)屬性

類的靜態(tài)代碼塊

類的非靜態(tài)屬性

類的非靜態(tài)代碼塊

構(gòu)造方法

》有父類的情況:

父類的靜態(tài)屬性

父類的靜態(tài)代碼塊

子類的靜態(tài)屬性

子類的靜態(tài)代碼塊

父類的非靜態(tài)屬性

父類的非靜態(tài)代碼塊

父類構(gòu)造方法

子類非靜態(tài)屬性

子類非靜態(tài)代碼塊

子類構(gòu)造方法

部分特殊不引起類初始化,先記錄下吧官套。

通過子類引用父類的靜態(tài)字段蚁孔,不會導(dǎo)致子類初始化,對于靜態(tài)字段杠氢,只有直接定義這個字段的類才會被初始化

通過數(shù)組定義來引用類,不會觸發(fā)此類的初始化

常量在編譯階段會存入調(diào)用類的常量池中鼻百,本質(zhì)上并沒有直接引用到定義常量的類,因此不會觸發(fā)定義常量的類初始化

public static final int x =6/3; 能夠在編譯時(shí)期確定的玻靡,叫做編譯常量,不會引起類的初始化!!!

public static final int x =new Random().nextInt(100); 運(yùn)行時(shí)才能確定下來的,叫做運(yùn)行時(shí)常量臼朗,運(yùn)行時(shí)常量會引起類的初始化!!!,類的初始化只會有一次

在虛擬機(jī)規(guī)范中使用了一個很強(qiáng)烈的限定語:“有且僅有”绣否,這5種場景中的行為稱為對類進(jìn)行主動引用挡毅。除此之外,所有引用類的方式都不會觸發(fā)初始化,稱為被動引用取逾。

類變量(靜態(tài)變量)與成員變量的區(qū)別

靜態(tài)static修飾的成員苹支,不僅可以被對象所使用,還能被類直接使用晴埂;類其實(shí)也是對象寻定,JVM啟動時(shí)就會加載類路徑目錄下的類,當(dāng)內(nèi)存中加載的類太多太多琅锻,JVM的GC會根據(jù)某種算法對加載的某些類進(jìn)行清理唐含,釋放空間。當(dāng)JVM關(guān)閉時(shí)滚秩,類消失,靜態(tài)變量屬性也煙消云散郁油。

  • 靜態(tài)的優(yōu)點(diǎn):
    實(shí)現(xiàn)共享數(shù)據(jù)在內(nèi)存中的唯一存儲攀痊,節(jié)約了內(nèi)存空間;
    每個對象都不用在堆內(nèi)存中為其單獨(dú)開辟空間保存案站,直接使用共享的數(shù)據(jù)即可棘街。

  • 靜態(tài)的缺點(diǎn):
    常駐內(nèi)存,內(nèi)存釋放周期長石挂,只隨著類的消失而消失。
    類什么時(shí)候消失痹愚?

  • 類變量不是類的成員變量

  • 存儲位置不一樣
    成員變量,在堆內(nèi)存中窖式,每個對象都有自己的一份不同的成員變量存儲區(qū)疾瓮;隨著對象的創(chuàng)建而存在,隨著對象的回收而釋放
    靜態(tài)變量蜒灰,在方法區(qū)中肩碟,只有唯一的一份强窖,是類變量翅溺,每個對象都共享使用這個變量;隨著類的加載而存在咙崎,隨著類的消失而釋放

  • 生命周期不一樣
    成員變量吨拍,隨著對象的創(chuàng)建而存在,隨著對象的回收而釋放
    靜態(tài)變量伊滋,隨著類的加載而存在队秩,隨著類的消失而釋放

  • 調(diào)用方式不同
    成員變量,只能由對象調(diào)用
    靜態(tài)變量筒主,一般直接使用類名進(jìn)行調(diào)用
    成員變量,實(shí)例變量物舒,對象的特有屬性
    靜態(tài)變量,類變量火诸,該類中的對象都具有相同的一個屬性

8、字符串在Java生產(chǎn)開發(fā)中的使用頻率是非常高的悉盆,字符串對于我們而言非常關(guān)鍵馋吗。在C中是沒有String類型的,那么C語言要想實(shí)現(xiàn)字符串就必須使用char數(shù)組脚翘,通過一個個的字符來組拼成字符串来农。而在Java中String源碼分析可知,String也是char數(shù)組拼接而成的崇堰。字符串一定會被保存到常量池中沃于,且Java虛擬機(jī)如果發(fā)現(xiàn)常量池中已經(jīng)存在需要創(chuàng)建的字符串中,它就不會重復(fù)創(chuàng)建海诲,而是指向那個字符串即可繁莹,(深入Java源碼剖析之字符串常量)這就類似于如下操作。

 Student aa=new Student(123,"小花");//保存在堆內(nèi)存中特幔,而非常量池
 Student bb=aa;
 Student cc=aa;

9咨演、Java中的 數(shù)據(jù)類型分兩種:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型
基本數(shù)據(jù)類型:Java中的簡單類型(基本數(shù)據(jù)類型)從概念上分為四種:實(shí)數(shù)、整數(shù)敬辣、字符雪标、布爾值。八種基本數(shù)據(jù)類型如下:

實(shí)數(shù):double溉跃、float
整數(shù):byte村刨、short、int嵌牺、long
字符:char
布爾值:boolean

復(fù)雜類型(引用數(shù)據(jù)類型):String逆粹、類對象僻弹、數(shù)組蹋绽。

引用數(shù)據(jù)類型和基本數(shù)據(jù)類型的內(nèi)存模型本質(zhì)上是不一樣的卸耘。
基本數(shù)據(jù)類型的存儲原理是這樣的:所有的基本數(shù)據(jù)類型不存在“引用”的概念,基本數(shù)據(jù)類型都是直接存儲在棧內(nèi)存中的,椡遥空間里存儲的地址就是數(shù)據(jù)本身的值烦感。而Java語言里面只有這八種基本數(shù)據(jù)類型是這種存儲模型肥荔;

而其他的只要是繼承于Object類的引用數(shù)據(jù)類型,都是按照J(rèn)ava里面存儲對象的內(nèi)存模型來進(jìn)行數(shù)據(jù)存儲的。引用數(shù)據(jù)類型使用Java內(nèi)存堆和內(nèi)存棧來進(jìn)行這種類型的數(shù)據(jù)存儲;堆內(nèi)存存儲值,棧中存儲對象在堆內(nèi)存的首地址(引用地址)凄诞,而這個棧引用就叫引用變量轴咱。

簡單地講戈稿,基本數(shù)據(jù)類型是存儲在有序的棧內(nèi)存中的,而引用數(shù)據(jù)類型本身的值存儲在堆內(nèi)存中的。

基本數(shù)據(jù)類型由于長度固定,且需要空間比較少,所以直接存儲在棧中;而對象比較大,所以棧中只存儲一個4btye大小的引用地址,堆內(nèi)存中存值。

10豁辉、java中聲明了一個變量餐抢,便會給這個變量分配內(nèi)存空間顽冶,且被聲明的變量會對應(yīng)有一個內(nèi)存地址生成竿屹。在類型轉(zhuǎn)換中,低比特?cái)?shù)(bit)的數(shù)據(jù)類型向高比特?cái)?shù)的類型轉(zhuǎn)換可以自動轉(zhuǎn)換,高比特?cái)?shù)的數(shù)據(jù)類型向低比特?cái)?shù)的類型轉(zhuǎn)換就需要使用強(qiáng)制類型轉(zhuǎn)換了。

比特?cái)?shù)由低到高 byte->short->char->int->long->float->double

1.bit就是位糠溜,也叫比特位承匣, 也是b ,是計(jì)算機(jī)表示數(shù)據(jù)最小的單位

2.byte就是字節(jié),也是B

3.1byte=8bit

4.1byte就是1B

5.一個字符=2字節(jié)

6.1KB=1024B

7.轉(zhuǎn)換關(guān)系如下:

(1)1KB=1024B

(2) 1B= 8b

11袍暴、棧內(nèi)存、堆內(nèi)存措嵌、常量池區(qū)別:

Java內(nèi)存分配主要包括以下幾個區(qū)域:

  1. 寄存器:最快的存儲區(qū), 由編譯器根據(jù)需求進(jìn)行分配或听,我們在程序中無法控制
  1. 棧:存放基本數(shù)據(jù)類型的數(shù)據(jù)和對象的引用(引用變量),但對象本身不存放在棧中讨永,而是存放在堆中
  1. 堆:存放用new產(chǎn)生的數(shù)據(jù)或者說對象
  1. 靜態(tài)域:存放在對象中用static定義的靜態(tài)成員
  1. 常量池:存放常量揪漩。字符串常量(例如:String a="123")和final修飾的基本數(shù)據(jù)類型常量昂勒。
  1. 非RAM(隨機(jī)存取存儲器)存儲:硬盤等永久存儲空間

字符串

?由上圖可以看出,使用雙引號直接定義的String對象會指向常量池中的同一個對象鸦难,通過new產(chǎn)生一個字符串(假設(shè)為“china”)時(shí),會先去常量池中查找是否已經(jīng)有了“china”對象牲证,如果沒有則在常量池中創(chuàng)建一個此字符串對象,然后堆中再創(chuàng)建一個常量池中此”china”對象的拷貝對象娩嚼。

----》好文參考推薦:Java內(nèi)存分配之堆、棧和常量池

修飾符作用域

12潜沦、靜態(tài)變量臂痕、靜態(tài)方法是不屬于某個實(shí)例對象,而是屬于類的蛮浑,所以也稱為類變量调鲸,只要程序加載了類的字節(jié)碼驱证,不用創(chuàng)建任何實(shí)例對象车份,靜態(tài)變量就會被分配空間严就,靜態(tài)變量就可以被使用了肴沫。總之悲幅,實(shí)例變量必須創(chuàng)建對象后才可以通過這個對象來使用豌习,靜態(tài)變量則可以直接使用類名來引用稚失。每個靜態(tài)變量內(nèi)存地址是唯一的初厚,UserBean類中有一個name靜態(tài)變量衫生,不管new UserBean()多少個實(shí)例愈腾,name變量所指向的內(nèi)存地址是唯一的(也就是說m1.name、m2.name和UserBean.name指向同一個變量)岂津,只要有一個地方對靜態(tài)變量做更改虱黄,所有使用引用的地方都會改變,eg:m1.name=“小紅”吮成,則m2.name橱乱、UserBean.name都是改為了“小紅”。

靜態(tài)初始化器:靜態(tài)初始化器是類中由static修飾的一對“{ }”包裹的粱甫,不同于構(gòu)造方法泳叠,它并不是方法,因?yàn)樗]有返回值和方法名茶宵。它是屬于類的危纫,在初始化器加載類的時(shí)候初始化一次,其它時(shí)候不執(zhí)行不加載乌庶。多個靜態(tài)初始化器是按編碼秩序依次執(zhí)行种蝶。

注意:靜態(tài)內(nèi)部類默認(rèn)持有外部類實(shí)例引用, 而導(dǎo)致外部類無法釋放瞒大,最終造成內(nèi)存泄露螃征。這時(shí)候就要給外部實(shí)例引用添加弱引用標(biāo)識符了,盡可能的避免泄漏透敌。

是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用会傲?

不可以锅棕。因?yàn)榉莝tatic方法要與對象關(guān)聯(lián)在一起,必須創(chuàng)建一個對象后淌山,才可以在該對象上進(jìn)行方法的調(diào)用裸燎,而static方法調(diào)用時(shí)不需要創(chuàng)建對象,可以直接調(diào)用泼疑。也就是說德绿,一個static方法被調(diào)用時(shí),可能還沒有創(chuàng)建任何實(shí)例對象退渗,所以移稳,一個static方法內(nèi)部不可以發(fā)出對非static方法的調(diào)用。

13会油、Java中是值傳遞个粱,而不是引用傳遞,不管是是基本數(shù)據(jù)類型還是引用數(shù)據(jù)類型都是值傳遞翻翩。
java參數(shù)傳遞(到底是值傳遞還是引用傳遞都许?)
java是值傳遞還是引用傳遞?

14嫂冻、List 接口實(shí)現(xiàn)了 Collection 接口胶征,它主要有兩個實(shí)現(xiàn)類:ArrayList 類和 LinkedList 類。

  • LinkedList是鏈接列表實(shí)現(xiàn)的桨仿,同樣也是屬于線程不安全睛低,每一個值都會有兩個引用,一個引用指向列表前一個值服傍,另一個引用指向后一個值钱雷,所以它占用的內(nèi)存更多。但是它對數(shù)據(jù)的添加吹零、插入罩抗、刪除是最快的。
  • ArrayList底層是基于動態(tài)數(shù)組實(shí)現(xiàn)的瘪校,屬于線程不安全的,每一次值的增刪都要要移動數(shù)組重新排列和計(jì)算數(shù)組的容量名段,造成速度很慢阱扬,ArrayList 中不斷添加元素,其容量也自動增長伸辟。它的查找速度是最快的麻惶。
  • Vector和ArrayList基本相似,利用數(shù)組及擴(kuò)容實(shí)現(xiàn)List信夫,但Vector是一種線程安全的List結(jié)構(gòu)窃蹋,它的讀寫效率不如ArrayList卡啰,其原因是在該實(shí)現(xiàn)類內(nèi)在方法上加上了同步關(guān)鍵字synchronized
  • Stack繼承于Vector,基本特性與Vector一致,線程安全警没,但效率低匈辱,實(shí)際就是利用Vector抽象成棧,使之擁有后進(jìn)先出的特性杀迹。

List:有序集合
Set:不重復(fù)集合亡脸,LinkedHashSet按照插入排序,SortedSet可排序树酪,HashSet無序
Map:鍵值對集合

  • List和Set是存儲單列數(shù)據(jù)的集合浅碾,Map是存儲鍵值對這樣的雙列數(shù)據(jù)的集合;
  • List中存儲的數(shù)據(jù)是有順序的续语,并且值允許重復(fù)垂谢;Map中存儲的數(shù)據(jù)是無序的,它的鍵是不允許重復(fù)的疮茄,但是值是允許重復(fù)的滥朱;Set中存儲的數(shù)據(jù)是無順序的,并且不允許重復(fù)娃豹,但元素在集合中的位置是由元素的hashcode決定焚虱,即位置是固定的(Set集合是根據(jù)hashcode來進(jìn)行數(shù)據(jù)存儲的,所以位置是固定的懂版,但是這個位置不是用戶可以控制的鹃栽,所以對于用戶來說set中的元素還是無序的)。
    三大集合:List躯畴、Map民鼓、Set的區(qū)別與聯(lián)系

15、Map的幾種類型

  • HashMap是基于哈希表實(shí)現(xiàn)的蓬抄,是無序的丰嘉。每一個元素是一個key-value對,其內(nèi)部通過單鏈表解決沖突問題嚷缭,HasnMap內(nèi)部有自己的擴(kuò)容機(jī)制饮亏,容量不足(超過了閥值)時(shí),同樣會自動增長阅爽。HashMap是非線程安全的路幸,只是用于單線程環(huán)境下,多線程環(huán)境下可以采用concurrent并發(fā)包下的ConcurrentHashMap付翁。HashMap 實(shí)現(xiàn)了Serializable接口简肴,因此它支持序列化,實(shí)現(xiàn)了Cloneable接口百侧,能被克隆砰识。HashMap中key和value都允許為null能扒。key為null的鍵值對永遠(yuǎn)都放在以table[0]為頭結(jié)點(diǎn)的鏈表中。

HashMap可以使用可變對象作為key辫狼,但是對象實(shí)體類需要重寫equals(Object obj)初斑、hashCode()兩方法

  • HashTable同HashMap一樣是基于哈希表實(shí)現(xiàn)的,是無序的予借。同樣每個元素也是一個key-value對越平,其內(nèi)部也是通過單鏈表解決沖突問題,容量不足(超過了閥值)時(shí)灵迫,同樣會自動增長秦叛。HashTable也是JDK1.0引入的類,但是是線程安全的瀑粥,適合用于多線程環(huán)境中挣跋。HashTable同樣實(shí)現(xiàn)了Serializable接口,它支持序列化狞换,實(shí)現(xiàn)了Cloneable接口避咆,能被克隆。 HashTable繼承自Dictionary類修噪,而HashMap繼承自AbstractMap類查库。但二者都實(shí)現(xiàn)了Map接口。現(xiàn)在已經(jīng)過時(shí)了黄琼。
  • LinkedHashMap是HashMap的子類樊销,是有序的集合。LinkedHashMap可以認(rèn)為是HashMap+LinkedList脏款,即它既使用HashMap操作數(shù)據(jù)結(jié)構(gòu)围苫,又使用LinkedList維護(hù)插入元素的先后順序。LinkedHashMap雖然增加了時(shí)間和空間上的開銷撤师,但是通過維護(hù)一個運(yùn)行于所有條目的雙向鏈表剂府,LinkedHashMap保證了元素迭代的順序。該迭代順序可以是插入順序或者是訪問順序剃盾,即插入的順序和取出的順序相同腺占。
  • TreeMap 是一個有序的key-value集合,它是通過紅黑樹實(shí)現(xiàn)的痒谴。默認(rèn)是按key升值排序衰伯。
  • TreeMap和LinkedHashMap是有序的,HashMap闰歪、ConcurrentHashMap嚎研、HashTable是無序的蓖墅,且只有ConcurrentHashMap和HashTable是線程安全的库倘。
    HashTable和HashMap的區(qū)別詳解
map.jpeg

16临扮、String,StringBuffer與StringBuilder的區(qū)別

  • String的值是不可變的,這就導(dǎo)致每次對String的操作都會生成新的String對象教翩,這樣不僅效率低下杆勇,而且大量浪費(fèi)有限的內(nèi)存空間。
  • 和 String 類不同的是饱亿,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改蚜退,并且不產(chǎn)生新的未使用對象。
  • StringBuilder 類在 Java 5 中被提出彪笼,它和 StringBuffer 之間的最大不同在于 StringBuilder 的方法不是線程安全的(不能同步訪問)钻注,StringBuffer的append、insert等操作方法都是加synchronized鎖的配猫。但是StringBuilder 相較于 StringBuffer 有速度優(yōu)勢幅恋。

17、Java中類泵肄、抽象類捆交、接口:

  • 類:在java中所有的類的都是直接或者間接的繼承Object這個類,也就是說所有的類都是Object的子類腐巢,而一般我們沒有特別extends繼承其他類品追,那我們創(chuàng)建的這個類的直接父類就是Object
  • 抽象類:抽象類類似于一個給其他類的一個模板,抽象類里面定義多個抽象方法冯丙,用abstract聲明肉瓦,供它的子類去實(shí)現(xiàn)這個方法(這里所謂實(shí)現(xiàn)就是指具體重寫),在子類方法里去實(shí)現(xiàn)想要的具體操作银还。抽象類只能被子類繼承去實(shí)現(xiàn)具體方法风宁,而不能創(chuàng)建對象,即不能通過new來生成抽象類對象蛹疯。子類繼承了抽象類就必須要實(shí)現(xiàn)它的所有抽象方法戒财。
  • 接口:接口可以說是特殊的抽象類,因?yàn)榻涌陬惱锩嬷荒苤荒芎琣bstract聲明的抽象方法存在捺弦,一般abstract是默認(rèn)存在不需要我們寫出來的饮寞。接口的屬性成員必須初始化。接口只能被子類implements實(shí)現(xiàn)列吼,而不能直接extends繼承幽崩,但是接口類A可以" A implements B , C "其中A、B寞钥、C都是接口慌申,即接口具有多繼承性。

18、數(shù)據(jù)庫


image.png

image.png

image.png

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹄溉,一起剝皮案震驚了整個濱河市咨油,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柒爵,老刑警劉巖役电,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棉胀,居然都是意外死亡法瑟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門唁奢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霎挟,“玉大人,你說我怎么就攤上這事麻掸∶タ福” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵论笔,是天一觀的道長采郎。 經(jīng)常有香客問我,道長狂魔,這世上最難降的妖魔是什么蒜埋? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮最楷,結(jié)果婚禮上整份,老公的妹妹穿的比我還像新娘。我一直安慰自己籽孙,他們只是感情好烈评,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著犯建,像睡著了一般讲冠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上适瓦,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天竿开,我揣著相機(jī)與錄音,去河邊找鬼玻熙。 笑死否彩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗦随。 我是一名探鬼主播列荔,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贴浙?” 一聲冷哼從身側(cè)響起筷转,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悬而,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锭汛,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笨奠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唤殴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片般婆。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖朵逝,靈堂內(nèi)的尸體忽然破棺而出蔚袍,到底是詐尸還是另有隱情,我是刑警寧澤配名,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布啤咽,位于F島的核電站,受9級特大地震影響渠脉,放射性物質(zhì)發(fā)生泄漏宇整。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一芋膘、第九天 我趴在偏房一處隱蔽的房頂上張望鳞青。 院中可真熱鬧,春花似錦为朋、人聲如沸臂拓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胶惰。三九已至,卻和暖如春霞溪,著一層夾襖步出監(jiān)牢的瞬間童番,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工威鹿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剃斧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓忽你,卻偏偏與公主長得像幼东,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容