1.String
string對象的不變性、被final關鍵字修飾。
使用charat方法替代startwith/endwith方法(提高性能)
使用buffer(方法同步,性能較差)和builder(同步,性能較好)來替換string
equals(不可以比較基本數據類型,重寫方法是為了比較對象的值是否相同,否則則比較對象的引用地址)
==(基本類型比較值,引用類型比較地址)
equals方法為true的兩個對象一定相等,hashcode方法相同的兩個對象不一定相同
2.list
* 1.ArrayList(數組實現、線程不同步.初始大小為10,每次擴容為1.5倍)
* 2.Linkedlist(循環雙向鏈表:header+link1+link2+header)
* 3.vector(數組實現、線程同步)
3.map
* 1.hashtable (線程同步、不允許key或value使用null值)
* 2.hashmap (線程不同步、數組實現、初始大小16、負載因子0.75、數據存放無序)
* 3.linkedhashmap(數據存放有序)
* 4.treemap(實現sortedMap接口對元素進行排序、基於紅黑樹實現)
4.set(元素不重復、基於對map的封裝)
* 1.hashset
* 2.linkedHashSet
* 3.TreeSet
集合優化
* 1.for循環中重復的代碼可以提取到外部。例如list.size()
* 2.省略相同操作
* 3.調用元素避免調用方法
RandomAccess接口:實現該接口的對象即支持快速隨機訪問的對象
* (基於數組的list實現該接口,可直接使用get方法獲取元素、性能較好
* 基於鏈表的未實現,需通過迭代器進行元素迭代、性能較差)
5. Java NIO:(寫操作類似於向水瓶中蓄水,讀操作類似於從水瓶中取水。渠道等同於吸管的作用)
*1.打開渠道,獲取buffer
* 2.讀取文件,獲取channel
* 3.給buffer分配大小
* 4.channel數據讀取到buffer
* 5.關閉channel
*scatter(分散)/gather(聚集)— 一個channel對應多個gather:傳輸數據分散處理。以數組形式存儲
* selecter:一個線程管理多個channel
tips:
* 1.try/catch移到循環體之外
* 2.位運算替代乘除法
* 3.提取重復表達式
* 4.對於重量級對象,使用clone()替代new
* 5.使用靜態方法替代實例方法
Java 引用
*引入引用的目的:人為控制對象生命周期、方便JVM進行回收
*強(所指對象不會被系統回收)》軟(基於內存進行存活、網頁、圖片緩存)》弱(只要發現就回收)》虛(跟蹤垃圾回收過程)