達(dá)內(nèi)筆記整理_第1頁(yè)
達(dá)內(nèi)筆記整理_第2頁(yè)
達(dá)內(nèi)筆記整理_第3頁(yè)
達(dá)內(nèi)筆記整理_第4頁(yè)
達(dá)內(nèi)筆記整理_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Java SE (java API) Day012012/1/20=Java API Java 系統(tǒng)類庫(kù) Java 類庫(kù)Java 核心的API(最常用的API類)字符串, 集合, IO, 線程, 網(wǎng)絡(luò), 反射等Swing(很少用)API都是類文件, 在rt.jar中1 String 字符串 String 字符串 = char + 操作(toUpperCase(), concat()String 的底層就是char數(shù)組,是char數(shù)組的封裝類 類: 數(shù)據(jù)+相關(guān)的操作 char數(shù)組只是數(shù)據(jù), 沒有操作 一串字符就是字符串: char , String, StringBuilder 1 字符串字面量

2、(直接量)都是String類型實(shí)例 字符串常量 public static final String TYPE = car; / 常量 字面量/直接量 Stirng 內(nèi)部就是一個(gè)char. 2 String API 有一個(gè)實(shí)現(xiàn)原則: 對(duì)象內(nèi)容永遠(yuǎn)不變 也就是說(shuō): String對(duì)象永遠(yuǎn)不變. 為性能提供極致的優(yōu)化!String API 如果改變內(nèi)容就返回新字符串, 否則返回原字符串StringBuffer 與 StringBuilder 的區(qū)別與比較1) StringBuffer 是線程安全的可變字符序列。 StringBuilder是一個(gè)可變的字符序列。2)StringBuffer impor

3、t java.util.Arrays;/*字符串?dāng)?shù)組與String類的原理*/public class P2_CharArrayDemo public static void main(String args) System.out.println(Java 可以將char作為字符串處理);char chs1=北,京;char chs2=我,愛,你;System.out.println(chs1);/北京System.out.println(char運(yùn)算需要編程處理,如連接:);char chs3=Arrays.copyOf(chs1, chs1.length+chs2.length);/Sy

4、stem.arraycopy(Object src, int srcPos, /Object dest, int destPos, int length)/:從指定源數(shù)組中復(fù)制一個(gè)數(shù)組,復(fù)制從指定的位置開始,到目標(biāo)數(shù)組的指定位置結(jié)束。/System.arraycopy(src, srcPos, dest, destPos, length);System.arraycopy(chs2, 0, chs3, chs1.length, chs2.length);System.out.println(chs3);/北京我愛你System.out.println(String API提供了簡(jiǎn)潔的連接運(yùn)算:

5、);String s1=北京;String s2=我愛你;String s3=s1.concat(s2);/String API方法System.out.println(字符串轉(zhuǎn)大寫底層原理:);char chs4=A,a,c,f;char chs5=Arrays.copyOf(chs4, chs4.length);for(int i=0;i=a&c=z)chs5i=(char)(c+A-a);/package Day5;/*String API 方法演示 :字符串對(duì)象是不變的*/public class P2_StringAPIDemo public static void main(Str

6、ing args) System.out.println(String API不改變String對(duì)象內(nèi)容:);String s1=ABCD;String s2=Abcd;/字符串(原)對(duì)象是不變的!String API不改變String對(duì)象內(nèi)容String s3=s1.toUpperCase();/不需要改變,返回原對(duì)象String s4=s2.toUpperCase();/需要改變,返回新對(duì)象System.out.println(s1:+s1+,s3:+s3);System.out.println(s1=s3:+(s1=s3);System.out.println(s2:+s2+,s4+s4

7、);System.out.println(s2=s4:+(s2=s4);System.out.println(String 和 char 可以相互轉(zhuǎn)換:);char chs=我,愛,中,國(guó);String china=new String(chs);System.out.println(china);String str=龍年吉祥;chs=str.toCharArray();System.out.println(chs);/龍年吉祥/*理解String內(nèi)存存儲(chǔ)機(jī)制的一個(gè)經(jīng)典程序*/public class P2_StringParamDemo public static void main(St

8、ring args) String s=AA;char chs=A,A;test(s,chs);System.out.println(s);/AASystem.out.println(chs);/SApublic static void test(String str,char chs)str=BC;chs0=S;chs=str.toCharArray();import java.util.Arrays;/* * StringBuilder 一個(gè)可變的字符序列。 */public class P3_StringBufferVSStringBuilder public static void m

9、ain(String args) /* * StringBuilder: 變成算法維護(hù)的char,使用與大量字符內(nèi)容的操作 */char chs=new char4;/4個(gè)緩存空間int size=0;/字符數(shù)量chssize+=中;chssize+=國(guó);chssize+=北;chssize+=京;/char數(shù)組的變成算法(擴(kuò)容)chs=Arrays.copyOf(chs, chs.length*2);chssize+=!;StringBuilder buf=new StringBuilder(4);buf.append(國(guó));buf.append(北);buf.append(京);buf.a

10、ppend(!);buf.insert(0, 中);System.out.println(*);/* StringBuilder和String 的連接性能測(cè)試 */public class P4_StringBuilderVSStringDemo public static void main(String args) String str=Hello,;String str2=str+World;/String 字符串常量,創(chuàng)建之后不能再改變。System.out.println(str=str2);StringBuilder sb=new StringBuilder();/falsesb.

11、append(中);sb.append(國(guó));sb.append(我);sb.append(愛);sb.insert(1, 你);StringBuilder sb2=sb.replace(0,1,中國(guó));/StringBuilder 創(chuàng)建之后可以再改變。System.out.println(sb=sb2);/trueSystem.out.println(*);/* * String 字符串常量,創(chuàng)建之后不能再改變;StringBuilder 創(chuàng)建之后可以再改變。 * 當(dāng)對(duì)String 類進(jìn)行連接時(shí),會(huì)產(chǎn)生新的對(duì)象; * 而對(duì)StringBuilder 進(jìn)行連接操作不會(huì)產(chǎn)生新的對(duì)象。 * 因此S

12、tringBuilder的連接操作比String塊很多。 */System.out.println(testString(50000);/5063System.out.println(testStringBuilder(50000);/0public static long testString(int n)long start = System.currentTimeMillis();String s=;for(int i=0;in;i+)s+=A;long end=System.currentTimeMillis();return end-start;public static long

13、testStringBuilder(int n)long start=System.currentTimeMillis();StringBuilder buf=new StringBuilder();for(int i=0;i 23String: char + 方法(操作, API功能)StringBuilder: char + 方法(操作char 的內(nèi)容)char:字符序列, 只有字符數(shù)據(jù), 沒有操作, 如果算法優(yōu)秀, 性能最好String: 內(nèi)部包含內(nèi)容不可變的char, 表現(xiàn)為String對(duì)象不可變 String包含操作(API方法), 是對(duì)char 操作, 但不改變?cè)瓕?duì)象 經(jīng)常返回新的

14、String對(duì)象, 很多String API提供了復(fù)雜的 性能優(yōu)化算法, 如: 靜態(tài)字符串池, 如果不需要操作返回原對(duì)象StringBuilder: 內(nèi)部也是一個(gè)char, 但是這個(gè)數(shù)組內(nèi)容可變, 并且自動(dòng) 維護(hù)擴(kuò)容算法, 因?yàn)閿?shù)據(jù)內(nèi)容可變, 所以叫: 可變字符串. StringBuilder API 方法, 是動(dòng)態(tài)維護(hù)char內(nèi)容, 都可以改變 char 內(nèi)容.常用的正則表達(dá)式常用的正則表達(dá)式主要有以下幾種:匹配中文字符的正則表達(dá)式: u4e00-u9fa5評(píng)注:匹配中文還真是個(gè)頭疼的事,有了這個(gè)表達(dá)式就好辦了哦獲取日期正則表達(dá)式:d4年|-|.d1,2月|-|.d1,2日?評(píng)注:可用來(lái)匹配

15、大多數(shù)年月日信息。匹配雙字節(jié)字符(包括漢字在內(nèi)):x00-xff評(píng)注:可以用來(lái)計(jì)算字符串的長(zhǎng)度(一個(gè)雙字節(jié)字符長(zhǎng)度計(jì)2,ASCII字符計(jì)1)匹配空白行的正則表達(dá)式:ns*r評(píng)注:可以用來(lái)刪除空白行匹配HTML標(biāo)記的正則表達(dá)式:*.*?|評(píng)注:網(wǎng)上流傳的版本太糟糕,上面這個(gè)也僅僅能匹配部分,對(duì)于復(fù)雜的嵌套標(biāo)記依舊無(wú)能為力匹配首尾空白字符的正則表達(dá)式:s*|s*$評(píng)注:可以用來(lái)刪除行首行尾的空白字符(包括空格、制表符、換頁(yè)符等等),非常有用的表達(dá)式匹配Email地址的正則表達(dá)式:w+(-+.w+)*w+(-.w+)*.w+(-.w+)*評(píng)注:表單驗(yàn)證時(shí)很實(shí)用匹配網(wǎng)址URL的正則表達(dá)式:a-zA-z

16、+:/s*評(píng)注:網(wǎng)上流傳的版本功能很有限,上面這個(gè)基本可以滿足需求匹配帳號(hào)是否合法(字母開頭,允許5-16字節(jié),允許字母數(shù)字下劃線):a-zA-Za-zA-Z0-9_4,15$評(píng)注:表單驗(yàn)證時(shí)很實(shí)用匹配國(guó)內(nèi)電話號(hào)碼:d4-d7|d3-d8評(píng)注:匹配形式如或配騰訊QQ號(hào):1-90-94,評(píng)注:騰訊QQ號(hào)從10000開始匹配中國(guó)郵政編碼:1-9d(?!d)評(píng)注:中國(guó)郵政編碼為6位數(shù)字匹配身份證:d17d|X|d15評(píng)注:中國(guó)的身份證為15位或18位匹配ip地址:(20-4d|250-5|01?dd?).)3(20-4d|250-5|01?dd

17、?)。評(píng)注:提取ip地址時(shí)有用匹配特定數(shù)字:1-9d*$/匹配正整數(shù)-1-9d*$ /匹配負(fù)整數(shù)-?1-9d*$/匹配整數(shù)1-9d*|0$/匹配非負(fù)整數(shù)(正整數(shù) + 0)-1-9d*|0$/匹配非正整數(shù)(負(fù)整數(shù) + 0)1-9d*.d*|0.d*1-9d*$/匹配正浮點(diǎn)數(shù)-(1-9d*.d*|0.d*1-9d*)$/匹配負(fù)浮點(diǎn)數(shù)-?(1-9d*.d*|0.d*1-9d*|0?.0+|0)$/匹配浮點(diǎn)數(shù)1-9d*.d*|0.d*1-9d*|0?.0+|0$/匹配非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0)(-(1-9d*.d*|0.d*1-9d*)|0?.0+|0$/匹配非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0)評(píng)注:處

18、理大量數(shù)據(jù)時(shí)有用,具體應(yīng)用時(shí)注意修正匹配特定字符串:A-Za-z+$/匹配由26個(gè)英文字母組成的字符串A-Z+$/匹配由26個(gè)英文字母的大寫組成的字符串a(chǎn)-z+$/匹配由26個(gè)英文字母的小寫組成的字符串A-Za-z0-9+$/匹配由數(shù)字和26個(gè)英文字母組成的字符串w+$/匹配由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串1.驗(yàn)證用戶名和密碼:(a-zA-Zw5,15$)正確格式:A-Za-z_0-9組成,并且第一個(gè)字必須為字母616位;2.驗(yàn)證電話號(hào)碼:((d3.4-)d7,8$)正確格式:xxx/xxxx-xxxxxxx/xxxxxxxx;3.驗(yàn)證身份證號(hào)(15位或18位數(shù)字):(d15|d1

19、8$);4.驗(yàn)證Email地址:(w+(-+.w+)*w+(-.w+)*.w+(-.w+)*$);5.只能輸入由數(shù)字和26個(gè)英文字母組成的字符串:(A-Za-z0-9+$) ;6.整數(shù)或者小數(shù):0-9+.0,10-90,2$7.只能輸入數(shù)字:0-9*$。8.只能輸入n位的數(shù)字:dn$。9.只能輸入至少n位的數(shù)字:dn,$。10.只能輸入mn位的數(shù)字:。dm,n$11.只能輸入零和非零開頭的數(shù)字:(0|1-90-9*)$。12.只能輸入有兩位小數(shù)的正實(shí)數(shù):0-9+(.0-92)?$。13.只能輸入有13位小數(shù)的正實(shí)數(shù):0-9+(.0-91,3)?$。14.只能輸入非零的正整數(shù):+?1-90-9*

20、$。15.只能輸入非零的負(fù)整數(shù):-1-90-9*$。16.只能輸入長(zhǎng)度為3的字符:.3$。17.只能輸入由26個(gè)英文字母組成的字符串:A-Za-z+$。18.只能輸入由26個(gè)大寫英文字母組成的字符串:A-Z+$。19.只能輸入由26個(gè)小寫英文字母組成的字符串:a-z+$。20.驗(yàn)證是否含有%&,;=?$等字符:%&,;=?$x22+。21.只能輸入漢字:u4e00-u9fa50,$22.驗(yàn)證URL:http:/(w-+.)+w-+(/w-./?%&=*)?$。23.驗(yàn)證一年的12個(gè)月:(0?1-9|10-2)$正確格式為:0109和112。24.驗(yàn)證一個(gè)月的31天:(0?1-9)|(1|2)0

21、-9)|30|31)$正確格式為;0109和131。3 線性表: List, 表示有先后次序的對(duì)象集合, 如歌曲列表 ArrayList = Object + 線性表操作(增刪改查) StringBuilder = char + 操作(增刪改查) ArrayList(1.2以后新的) 是使用變長(zhǎng)數(shù)組算法實(shí)現(xiàn)的 List (線性表方法) Vector(1.0) 是使用變長(zhǎng)數(shù)組算法實(shí)現(xiàn)是 List 矢量 向量 LinkedList 是采用雙向循環(huán)鏈表實(shí)現(xiàn)的List 接口中定義的方法 ArrayList 是利用變長(zhǎng)數(shù)組算法實(shí)現(xiàn)的 List接口定義的方法 它們都是List, 使用感受差不多 Linke

22、dList 在頭尾插入/修改速度很快, 讀取比較慢 ArrayList 本質(zhì)是數(shù)組, 讀取修改很快, 刪除較慢 一般使用ArrayList多些List 集合的實(shí)現(xiàn) 1 LinkedList 采用雙向循環(huán)鏈表實(shí)現(xiàn) 2 ArrayList 變長(zhǎng)數(shù)組算法實(shí)現(xiàn) 新的 快 非線程安全 3 Vector 變長(zhǎng)數(shù)組算法實(shí)現(xiàn) 早期提供 慢 線程安全 4 線性表的應(yīng)用 貪吃蛇 1 蛇是節(jié)點(diǎn)的(線性)集合, 節(jié)點(diǎn)在行列坐標(biāo)(i,j)的位置 2 蛇可以走, 繼續(xù)向當(dāng)前方向走一步 也可以向指定方向走一步, 不能反向 蛇可以吃, 一個(gè)坐標(biāo)上的東西.(以后再考慮) 3 蛇在一個(gè)面板中運(yùn)行, 面板控制行列坐標(biāo) 面板可以提供

23、文字界面的打印方法, 顯示出一條蛇 4 重構(gòu)Worm類提供檢查坐標(biāo)是否在蛇身上的方法 5 提供測(cè)試類測(cè)試蛇的面板運(yùn)行.5 Map 1 HashMap 新 2 Hashtable 舊 (1.2以前) 散列表概念 1 容量: 散列表中散列數(shù)組大小. 2 散列運(yùn)算: key-散列值(散列數(shù)組下標(biāo))的算法, 如: mm.hashCode()%10-8 3 散列桶: 散列值相同的元素的線性集合 4 加載因子: 就是散列數(shù)組加載率, 一般小于75%性能比較理想 就是:元素?cái)?shù)量/散列數(shù)組大小, 如: 7/10=70% 5 散列查找: 根據(jù)Key計(jì)算散列值, 根據(jù)散列值(下標(biāo))找到 散列桶,在散列桶中順序比較

24、Key, 如果一樣, 就返回value 6 散列表中Key不同, Value可以重復(fù)1 散列表 Map 2 HashMap(關(guān)鍵字:值), 關(guān)鍵字key是唯一不重復(fù)的, 查找表 1) key可以是任何對(duì)象, Value可以任何對(duì)象, 2) key:value 成對(duì)的放置到集合中 3) 重復(fù)的key算一個(gè), 重復(fù)添加是替換操作 4) 根據(jù)key的散列值計(jì)算散列表, 元素按照散列值(不可見)排序 5) 默認(rèn)的容量: 16 默認(rèn)加載因子(加載率) 0.75 6) 根據(jù)key檢索查找value值 7) 用于查找場(chǎng)合, 可以提高根據(jù)key查找效率 作業(yè) 3 創(chuàng)建一個(gè)List集合, 添加多個(gè)測(cè)試數(shù)據(jù) 使用

25、Collections.sort() 實(shí)現(xiàn)排序. 在排序結(jié)果中使用 Collections.binarySearch() 查詢一個(gè)字符串的位置序號(hào).import java.util.*;public class P1_CollectionsDemo public static void main(String args) List list=new ArrayList();list.add(Tom);list.add(Andy);list.add(John);Collections.sort(list);System.out.println(list);/Andy, John, TomSyst

26、em.out.println(Collections.binarySearch(list, John);/1 4 測(cè)試集合HashSet 的全部方法. add() addAll();remove()等import java.util.*;/*HashSet的方法演示*/public class P2_HashSetDemo public static void main(String args) /* * 1)HashSet實(shí)現(xiàn)了Set接口,底層實(shí)際上是一個(gè)HashMap。 * 2)HashSet是沒有順序的。 * 3)注意,HashSet的實(shí)現(xiàn)不是同步的,即不是線程安全的! * 4)不能通過(guò)

27、迭代器遍歷HashSet集合 */HashSet set=new HashSet();/add(E o) 如果此集合中還不包含指定元素,則添加指定元素。set.add(中國(guó));set.add(美國(guó));set.add(日本);System.out.println(set.add(中國(guó));/falseSystem.out.println(set);/日本, 美國(guó), 中國(guó)/clone()返回此 HashSet 實(shí)例的淺表復(fù)制:并沒有克隆這些元素本身。HashSet hs=(HashSet)set.clone();System.out.println(set=hs);/falseSystem.out.println(hs);/日本, 美國(guó), 中國(guó)/size() 返回此集合中的元素的數(shù)量(集合的容量)。System.out.println(hs.size();/3hs.remove(日本);System.out.println(hs);/美國(guó), 中國(guó)set.clear();/從此集合中移除所有元素。System.out.println(set);/System.out.println(set.isEmpty();/true 5 測(cè)試HashMap的全部方法 put() get() remove()values() 等import java.util.*;/*HashM

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論