Welcome to Yumao′s Blog.
Java SE (java API) Day01
====================
Java API
Java 系統類庫
Java 類庫
Java 核心的API(最常用的API類)
字符串, 集合, IO, 線程, 網絡, 反射等
Swing(很少用)
API都是類文件, 在rt.jar中
1 String 字符串
字符串是"不變模式", 字符串的使用體驗, 非常接近基本類型
包裝類型也是"不變模式", Integer i= new Integer(1);
String 字符串 = char[] + 操作(toUpperCase(), concat())
類: 數據+相關的操作
char數組只是數據, 沒有操作
一串字符就是字符串: char[] , String, StringBuilder
1 字符串"字面量(直接量)"都是String類型實例
"字符串常量"
public static final String TYPE = "car";
///////// 常量 字面量/直接量
Stirng 內部就是一個char[].
2 String API 有一個實現原則: 對象內容永遠不變
也就是說: String對象永遠不變. 為性能提供極致的優化!
String API 如果改變內容就返回新字符串, 否則返回原則字符串
3 String 字面量(直接量), 如果相同, 會替換為同
一個String對象的引用, 常量連接的結果也被優化
為一個字符串.
String s = new String("abc");
4 String 的比較, equals, hashCode()
5 String API (字符串的常用方法)
這些方法如果返回String 一般是一個新String對象
toString() 除外.
字符串中的字符有序號, 從0開始.
API 方法:
charAt()
length()
trim()
indexOf()
lastIndexOf()
endsWith()
startsWith()
substring(int start, int end)
substring(int start)
String str = new String(new char[]{'1','2','3'});
char[] chs = str.toCharArray();
3 正則表達式: 負責的字符串匹配處理規則, 應用廣泛.
學習建議: 1 要能夠讀懂"正則表達式"
2 能夠寫出簡單的"正則表達式"
3 不要過多的分配學習時間!
可以應用於: java grep vi
1 字符集: [1234] 表示 1,2,3,4 之一
[^12] 表示除了 1,2
[1-5] 表示 1,2,3,4,5
[a-f] 表示 a-f 之間的
[0-9a-fA-F] 表示:一個16進制字符
0[xX][0-9a-fA-F]{1,8}
[w]{8,15}
預定義字符集:
d : [0-9]
. : 任意字符
w: 單詞字符 [0-9a-zA-Z_]
s: 匹配空白: 空格 t n r b p
D
S
W
2 {m,n} 數詞
{n}
{m,n}
? : {0,1}
+ : {1,}
* : {0,}
3 ^ 開頭
$ 結尾
郵政編碼: ^[0-9][0-9][0-9][0-9][0-9][0-9]$
^[0-9]{6}$
^d{6}$
用戶名規則: ^w{8,10}$
電話號: +86 13912345678
^(+86|0086)?s?d{11}$
身份證號碼: ^d{15}(d{2}[0-9xX])?$
一個點的坐標: ^d+(,s*|s+)d+$
^d+[,s]s*d+$
答案規則:^s*A?(s+|,s*)B?(s+|,s*)C?(s+|,s*)D?s*$
日期: 2011-01-30
^d{4}-d{2}-d{2}$
^d{4}(-d{2}){2}$
IP 地址: 192.168.0.2
^d{1,3}.d{1,3}.d{1,3}.d{1,3}$
^d{1,3}(.d{1,3}){3}$
^(d{1,3}.){3}d{1,3}$
String 對正則表達式的支持
.matches() 匹配正則表達式
.split("[,s|]") 切分字符串為字符串數組
.replaceAll()
Integer.parseInt() 轉換到字符串到整數: 如: "23"-> 23
String: char[] + 方法(操作, API功能)
StringBuilder: char[] + 方法(操作char[] 的內容)
char[]:字符序列, 只有字符數據, 沒有操作, 如果算法優秀, 性能最好
String: 內部包含內容不可變的char[], 表現為String對象不可變
String包含操作(API方法), 是對char[] 操作, 但不改變原對象
經常返回新的String對象, 很多String API提供了複雜的
性能優化算法, 如: 靜態字符串池, 如果不需要操作返回原對象
StringBuilder: 內部也是一個char[], 但是這個數組內容可變, 並且自動
維護擴容算法, 因為數據內容可變, 所以叫: 可變字符串.
StringBuilder API 方法, 是動態維護char[]內容, 都可以改變
char[] 內容.
StringBuffer VS StringBuilder
作業
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
預習: 內部類, 異常