Welcome to Yumao′s Blog.
Java SE Day02
====================
StringBuffer VS StringBuilder
算法基本一樣, 都是採用變長算法維護的char[], 以及對這個數組
內容進行”增刪改查”操作組成
StringBuilder java 5 以後提供,性能好,非線程安全(不檢查鎖)
StringBuffer 早期Java 提供, 性能稍差, 線程安全(檢查鎖)
線性表
散列表
3 線性表: List, 表示有先後次序的對象集合, 歌曲列表
1 什麼是線性表: 有先後次序的對象集合
2 java 的線性表實現原理
3 線性表的使用
ArrayList = Object[] + 線性表操作(增刪改查)
StringBuilder = char[] + 操作(增刪改查)
ArrayList(1.2以後新的) 是使用變長數組算法實現的
List (線性表方法)
Vector(1.0) 是使用變長數組算法實現是 List 矢量 向量
LinkedList 是採用雙向循環鏈表實現的List 接口中定義的方法
ArrayList 是利用變長數組算法實現的 List接口定義的方法
它們都是List, 使用感受差不多
LinkedList 在頭尾插入/修改速度很快, 讀取比較慢
ArrayList 本質是數組, 讀取修改很快, 刪除較慢
一般使用ArrayList多些
List 集合的實現
1 LinkedList 採用雙向循環鏈表實現
2 ArrayList 變長數組算法實現 新的 快 非線程安全
3 Vector 變長數組算法實現 早期提供 慢 線程安全
4 線性表的應用
貪吃蛇
1 蛇是節點的(線性)集合,
節點在行列坐標(i,j)的位置
2 蛇可以走, 繼續向當前方向走一步
也可以向指定方向走一步, 不能反向
蛇可以吃, 一個坐標上的東西.(以後再考慮)
3 蛇在一個面板中運行, 面板控制行列坐標
面板可以提供文字界面的打印方法, 顯示出一條蛇
4 重構Worm類提供檢查坐標是否在蛇身上的方法
5 提供測試類測試蛇的面板運行.
5 Map
1 HashMap 新
2 Hashtable 舊 (1.2以前)
1 散列表 Map
散列表概念
1) 容量: 散列表中散列數組大小.
2) 散列運算: key->散列值(散列數組下標)的算法,
如: "mm".hashCode()%10->8
3) 散列桶: 散列值相同的元素的"線性集合"
4) 加載因子: 就是散列數組加載率, 一般小於75%性能比較理想
就是:元素數量/散列數組大小, 如: 7/10=70%
5) 散列查找: 根據Key計算散列值, 根據散列值(下標)找到
散列桶,在散列桶中順序比較Key, 如果一樣, 就返回value
6) 散列表中Key不同, Value可以重複
2 HashMap(關鍵字:值), 關鍵字key是唯一不重複的, 查找表
1) key可以是任何對象, Value可以任何對象,
2) key:value 成對的放置到集合中
3) 重複的key算一個, 重複添加是替換操作
4) 根據key的散列值計算散列表, 元素按照散列值(不可見)排序
5) 默認的容量: 16 默認加載因子(加載率) 0.75
6) 根據key檢索查找value值
7) 用於查找場合, 可以提高根據key查找效率
8) HashMap VS Hashtable
A HashMap 新, 非線程安全, 不檢查鎖, 快
B Hashtable 舊 (1.2以前) 線程安全, 檢查鎖, 慢一點
作業
1 複習實現全部課堂案例代碼
2 比較性能:
a int i = 1; 重複 i=i+1
b Integer i = 1; 重複 i=i+1;
3 創建一個List集合, 添加多個測試數據
使用Collections.sort() 實現排序.
在排序結果中使用 Collections.binarySearch()
查詢一個字符串的位置序號.
4 測試集合HashSet 的全部方法.
add()
addAll();
remove()等
5 測試HashMap的全部方法
put()
get()
remove()
values() 等
6 (選做)實現完整版MyArrayList.
參考: MyArrayList
參考: 數組版本的發牌洗牌 corejava.day06.card1.CardDemo
集合版本的發牌洗牌 corejava.day06.card2.CardDemo
MyArrayList 實現參考: corejava.day06.list
預習: 內部類, 異常