List,Map,Set
Collection接口
* 是最基本的集合接口,一個Collection代表一組Object。
* 不論Collection的實際類型如何,都支持一個iterator()的方法,該方法返回一個迭代活玲,使用該迭代看了注意訪問Collection中的每一個元素。
List接口
* List是有序就Colliection谍婉,此接口能夠精確控制每個元素插入的位置舒憾。
* 用戶能夠使用索引來訪問List中的元素
* 允許有相同的元素
* 有序
* 實現(xiàn)類有ArrayList,LinkedList, vector穗熬,stack
- LinkedList類
- 鏈表實現(xiàn)镀迂,鏈表內(nèi)存是散亂的,每一個元素存儲本身內(nèi)存地址的同時還存儲了下一個元素的地址唤蔗。所以增刪塊探遵,查找慢
- 允許null元素。
- 非線程安全
- ArrayList類
- 線性實現(xiàn)妓柜,相當于可變大小的數(shù)組箱季,查詢效率高
- 允許所有元素,包括null领虹。
- 非線程安全
- vector類
- 類似ArrayList规哪,但卻是線程安全的求豫,效率較低
- stack類
- 繼承自vector類塌衰,實現(xiàn)一個后進先出的棧诉稍。
Set接口
* 不包含重復(fù)元素的Collection
* Set中只允許有一個null
- HashSet類
- 底層由HashMap實現(xiàn)
- 為快速查找設(shè)計的Set。
- 存入HashSet的對象必須定義hashCode()
- TreeSet類
- 保存順序的Set
- 底層為樹結(jié)構(gòu)
- 可以從Set中提取有序的序列
- LinkedHashSet
- 有HashSet的查詢速度最疆,且內(nèi)部使用鏈表維護與元素順序杯巨。
- 使用迭代器遍歷Set時,結(jié)果會按元素插入順序顯示努酸。
Map接口
* 沒有繼承Collection接口服爷,Map提供key到value的映射。
* 不能包含相同的key获诈,每個key只能映射一個value仍源。
* 保持鍵的唯一性
- HashTable類
- 實現(xiàn)Map接口,實現(xiàn)一個key-value映射的哈希表
- key或value不得為null
- 所有key對象都必須實現(xiàn)hashCode和equals方法[這個不影響舔涎,因為這兩個方法在根類Object中就有]
- 避免相同對象有不同hashCode的問題笼踩,只要同時復(fù)寫equals和hashCode即可
- 線程安全
- HashMap類
- 與HashTable類似,但卻是非線程安全
- 允許null亡嫌,key,value都可以為null
- 使用特殊的值嚎于,也就是hash碼來查詢的,效率很高挟冠。
- 所有java對象都能產(chǎn)生hash碼于购,hashCode()是定義在基類Object中的方法
- LikedHashMap類
- 與HashMap類似。
- 迭代遍歷時知染,獲取鍵值對的順序是插入順序肋僧,或者是最近最少使用的順序。
- 只比HashMap慢一點持舆。迭代訪問時更快色瘩。
- 使用鏈表維護內(nèi)部順序
注:我這里是不是可以理解為,鏈表維護的結(jié)合逸寓,如果用迭代的方式訪問居兆,速度就會非常快竹伸?
- TreeMap類
- 基于紅黑樹結(jié)構(gòu)的實現(xiàn)(也就是二叉樹)
- 查看鍵或鍵值對時泥栖,會被排序(順序由Comparable或Comparator任意一個接口決定)
- 非線程安全
transient關(guān)鍵字
* 在需要實現(xiàn)Serilizable接口的類中,將不需要序列化的屬性前添加transient關(guān)鍵字勋篓,序列化對象的時候吧享,這個屬性就不會序列化到指定的目的地中
* 一旦變量被transient修飾,變量將不再是對象持久化的一部分譬嚣,該變量內(nèi)容在序列化后無法獲得訪問钢颂。
* transient關(guān)鍵字只能修飾變量,而不能修飾方法和類拜银。注意殊鞭,本地變量是不能被transient關(guān)鍵字修飾的遭垛。變量如果是用戶自定義類變量,則該類需要實現(xiàn)Serializable接口操灿。
* 被transient關(guān)鍵字修飾的變量不再能被序列化锯仪,一個靜態(tài)變量不管是否被transient修飾,均不能被序列化趾盐。
final,finally,finalize
final
* 被final修飾的類庶喜,不能被繼承,所以一個類不能同時被final和abstract修飾
* 被final修飾的方法和屬性救鲤,在使用過程中不能被修改久窟。
* 聲明的變量必須在聲明時就初始化
* 聲明的方法也只被使用,不能被重寫
finally
* 用于異常情況本缠,在try catch之后使用瘸羡,無論異常是否拋出,finally都會被執(zhí)行
finalisze
* 方法名
* 垃圾回收器將對象從內(nèi)存中清理出去之前必須做的工作搓茬。在垃圾回收器確定某個對象沒有被引用時對這個對象調(diào)用的犹赖。
* 它是在Object中定義的,所以所有類都會有這個方法
String,StringBuilder,StringBuffer
首先說運行速度卷仑,或者說是執(zhí)行速度峻村,
在這方面運行速度快慢為:StringBuilder > StringBuffer > String
String最慢的原因:
String為字符串常量,
而StringBuilder和StringBuffer均為字符串變量锡凝,
即String對象一旦創(chuàng)建之后該對象是不可更改的粘昨,
但后兩者的對象是變量,是可以更改的窜锯。
而StringBuilder和StringBuffer的對象是變量张肾,
對變量進行操作就是直接對該對象進行更改,
而不進行創(chuàng)建和回收的操作锚扎,
所以速度要比String快很多吞瞪。
String ----> 字符串常量
StringBuffer ----> 字符串變量(線程安全的)
StringBuilder ----> 字符串變量(非線程安全的)
String:適用于少量的字符串操作的情況
StringBuilder:適用于單線程下在字符緩沖區(qū)進行大量操作的情況
StringBuffer:適用多線程下在字符緩沖區(qū)進行大量操作的情況