如何實(shí)現(xiàn)字符串的反轉(zhuǎn)及替換垦藏?
ArrayList和 Vector 都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù)
LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ)
Set和 Map 容器都有基于哈希存儲(chǔ)和排序樹(shù)的兩種實(shí)現(xiàn)版本辐啄,基于哈希存儲(chǔ)的版本理
論存取時(shí)間復(fù)雜度為O(1)饮怯,List以特定索引來(lái)存取元素
sleep()方法(休眠)是線程類(Thread)的靜態(tài)方法豺鼻,wait()是 Object 類的
方法耽梅,只有調(diào)用對(duì)象的notify()方法(或 notifyAll()方法)時(shí)才能喚醒
設(shè)計(jì)模式
二分法
程序和進(jìn)程的本質(zhì)區(qū)別是:靜態(tài)和動(dòng)態(tài)特征
Ipv6占用16個(gè)字節(jié)除盏,128bits叉橱;IP數(shù)據(jù)包的最大長(zhǎng)度是64K字節(jié)(65535)
RARP協(xié)議根據(jù)MAC地址求主機(jī)對(duì)應(yīng)的IP地址
異常:
可查異常即必須進(jìn)行處理的異常,要么try catch住,要么往外拋者蠕,誰(shuí)調(diào)用窃祝,誰(shuí)處理,比如 FileNotFoundException踱侣。如果不處理粪小,編譯器大磺,就不讓你通過(guò)
運(yùn)行時(shí)異常RuntimeException指:?不是必須進(jìn)行try catch的異常?常見(jiàn)運(yùn)行時(shí)異常:?除數(shù)不能為0異常:ArithmeticException下標(biāo)越界異常:ArrayIndexOutOfBoundsException空指針異常:NullPointerException在編寫(xiě)代碼的時(shí)候,依然可以使用try catch throws進(jìn)行處理探膊,與可查異常不同之處在于杠愧,即便不進(jìn)行try catch,也不會(huì)有編譯錯(cuò)誤?逞壁。Java之所以會(huì)設(shè)計(jì)運(yùn)行時(shí)異常的原因之一流济,是因?yàn)橄聵?biāo)越界,空指針這些運(yùn)行時(shí)異常太過(guò)于普遍腌闯,如果都需要進(jìn)行捕捉袭灯,代碼的可讀性就會(huì)變得很糟糕。
每個(gè)Unicode碼绑嘹,一個(gè)字符兩個(gè)字節(jié)稽荧,所以16bit。
String +“xxxx”會(huì)生成一個(gè)新的字符串對(duì)象工腋。數(shù)組不具備索引訪問(wèn)功能姨丈。
Collection主要方法
8種基本數(shù)據(jù)類型:byte short long char boolean int float double ??使用時(shí)是值傳遞,除此為應(yīng)用傳遞擅腰。
String s1=“hello”蟋恬;String s2= “hello”,(s1==s2)為true趁冈。若String s1 = new String(“hello”)歼争,為false;渗勘,new操作會(huì)在堆上分配兩個(gè)字符串沐绒,地址不同
Jvm會(huì)給新創(chuàng)建的對(duì)象一個(gè)指針this,this是對(duì)當(dāng)前類對(duì)象的引用旺坠,實(shí)例化后才存在乔遮。
類方法是不依賴對(duì)象而存在的方法,只要有訪問(wèn)權(quán)限取刃,類方法可以調(diào)用任意的類方法蹋肮。
對(duì)象被實(shí)例化后,類方法即可調(diào)用實(shí)例方法璧疗。
構(gòu)造方法:
可省略坯辩,編譯器會(huì)提供一個(gè)默認(rèn)的方法
構(gòu)造方法必須與類同名,方法名也可以和類同名崩侠。
一個(gè)對(duì)象被new時(shí)一定會(huì)調(diào)用構(gòu)造方法漆魔。
因?yàn)闃?gòu)造方法可以重載,所以一個(gè)類可以定義多個(gè)構(gòu)造方法
Array Vector LinkedList都是 可動(dòng)態(tài)改變 的數(shù)組
A和V是基于Object[] array,內(nèi)存開(kāi)辟連續(xù)空間有送。L采用雙向列表淌喻。v是線程安全的僧家。
事務(wù)是數(shù)據(jù)庫(kù)中一個(gè)單獨(dú)的執(zhí)行單元雀摘,四個(gè)屬性:原子性、一致性八拱、隔離性阵赠、持久性
Java集合筆記:
四種體系:
Set:無(wú)序不重復(fù)
List:有序重復(fù)
Map:有映射關(guān)系
Queue:隊(duì)列集合實(shí)現(xiàn)
兩個(gè)接口:Collection(list set queue)和Map(根接口)
HashSet:不是同步;元素值可以是null肌稻。當(dāng)向HashSet存入元素清蚀,調(diào)用該對(duì)象的hashCode()方法得到該對(duì)象的hashCode值,由值決定在在HashSet的存儲(chǔ)位置爹谭。
兩個(gè)元素相等的標(biāo)準(zhǔn):equals()方法返回true枷邪,hashCode()相等
不要輕易修改HashSet的對(duì)象。
LinkedHashSet是Hashet的子類诺凡,使用鏈表維護(hù)元素次序
TreeSet是SortedSet接口的實(shí)現(xiàn)類东揣,確保集合元素處于排序狀態(tài)。只能添加同一種類型的對(duì)象
當(dāng)一個(gè)對(duì)象加入加入TreeSet集合時(shí)腹泌,調(diào)用該對(duì)象的compareTo(Object obj)方法與容器其他方法比較大小嘶卧,然后根據(jù)紅黑樹(shù)結(jié)構(gòu)找到存儲(chǔ)位置,若相等凉袱,無(wú)法添加芥吟。返回0表示相等。
EnumSet類
各Set實(shí)現(xiàn)類的性能分析
Hashset的性能優(yōu)于TreeSet专甩,除非需要一個(gè)保持排序的Set钟鸵。遍歷LinkedHashSet更快。
EnumSet是所有Set中性能最好的涤躲,但只能保存同一個(gè)枚舉類的枚舉值作為集合元素
這三個(gè)類都是線程不安全的携添,可以通過(guò)synchronizedSortedSet方法包裝,在創(chuàng)建時(shí)進(jìn)行篓叶。
SortedSet s = Collections.synchronizedSortedSet(new TreeSet());
List集合
集合的每個(gè)元素都有對(duì)應(yīng)的順序索引烈掠。允許重復(fù)元素,默認(rèn)按添加順序設(shè)置索引缸托。
Void add (int index,Object element)
Object get/remove(int index)
List類的兩個(gè)典型實(shí)現(xiàn):ArrarList和Vector左敌,都是基于數(shù)組實(shí)現(xiàn),動(dòng)態(tài)允許再分配俐镐。使用initialCapacity設(shè)置數(shù)組長(zhǎng)度矫限,超過(guò)時(shí)會(huì)自動(dòng)增加。
顯著區(qū)別,ArrayList是線程不安全的
ArrayKust LinkedList是線性表的典型實(shí)現(xiàn)叼风,基于數(shù)組和鏈取董。LinkedList提供了雙端隊(duì)列、棧的功能无宿∫鹛總體上A的性能好。遍歷集合孽鸡,A和V使用隨機(jī)訪問(wèn)方法(get)蹂午,L使用迭代器(iterator)
Queue集合
PriorityQueue按隊(duì)列大小重新排序
Map集合
List有數(shù)字索引,Map用key索引彬碱。從源碼上看豆胸,包裝所有value為null的Map即可實(shí)現(xiàn)Set。
HashSet和Hashtable(古老的類):
Table線程安全巷疼,不能有key或value為null晚胡。Map允許有key或value為null
判斷key需要hashnode和equals。判斷value只要equals
泛型
集合缺點(diǎn)嚼沿,忘記對(duì)象數(shù)據(jù)類型估盘,dog對(duì)象的集合可能放進(jìn)cat對(duì)象
例子:創(chuàng)建一個(gè)只保存字符串的集合
List strList = new ArratList()后面的方括號(hào)可省略。
Java多線程
進(jìn)程的三個(gè)特征:獨(dú)立性(獨(dú)立擁有自己的資源伏尼,用戶進(jìn)程不可以直接訪問(wèn)其他進(jìn)程的地址空間)
動(dòng)態(tài)性:進(jìn)程和程序的區(qū)別忿檩。進(jìn)程具有生命周期和各種不同狀態(tài)
并發(fā)性:多個(gè)進(jìn)程可以在單個(gè)處理器上并發(fā)進(jìn)行(并行性是指同時(shí)執(zhí)行沒(méi)有切換)
線程,也被稱為輕量級(jí)進(jìn)程
進(jìn)程與線程的區(qū)別:
1)一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程.
2)多線程程序的并發(fā)性高爆阶,因?yàn)榫€程的劃分尺度小于進(jìn)程燥透。
3)進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立的內(nèi)存單元分配大量資源,而多個(gè)線程共享內(nèi)存辨图,效率高班套。
4)線程在執(zhí)行過(guò)程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口故河、順序執(zhí)行序列和程序的出口吱韭。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中鱼的,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制理盆。
5)進(jìn)程和線程的重要區(qū)別:從邏輯角度來(lái)看,多線程的意義在于一個(gè)應(yīng)用程序凑阶,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行猿规。但對(duì)于操作系統(tǒng)并沒(méi)有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用,來(lái)實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配宙橱。
創(chuàng)建線程
1.繼承Thread類
一姨俩、重寫(xiě)run方法蘸拔,也稱為線程執(zhí)行體。
二环葵、創(chuàng)建子類的實(shí)例调窍,即創(chuàng)建了線程的對(duì)象
三、調(diào)用start()方法啟動(dòng)線程
2.實(shí)現(xiàn)Runnable接口
一张遭、定義Runnable接口的實(shí)現(xiàn)類邓萨,重寫(xiě)run方法
二、創(chuàng)建Runnable實(shí)現(xiàn)類的實(shí)例
Runnable好處:
1可繼承多個(gè)接口
2共享一個(gè)target對(duì)象
Thread好處:
使用this即可獲得當(dāng)前線程
???fH?l