(此篇文章將持續(xù)更新)
一、flush()和close()的區(qū)別
- flush():將流中的緩沖區(qū)緩沖的數(shù)據(jù)刷新到目的地中,刷新后,流還可以繼續(xù)使用。
- close():關(guān)閉資源,但在關(guān)閉前會(huì)將緩沖區(qū)中的數(shù)據(jù)先刷新到目的地,否則丟失數(shù)據(jù),然后在關(guān)閉流。流不可以使用。如果寫入數(shù)據(jù)多,一定要一邊寫一邊刷新,最后一次可以不刷新,由close完成刷新并關(guān)閉。
二、ArrayList和LinkedList的區(qū)別
LinkedList底層實(shí)現(xiàn)是鏈表,ArrayList底層實(shí)現(xiàn)是數(shù)組
LinkedList不存在擴(kuò)容 的說(shuō)法,因?yàn)槭擎湵斫Y(jié)構(gòu)。ArrayList底層是動(dòng)態(tài)數(shù)組存在擴(kuò)容說(shuō)法,默認(rèn)的數(shù)組大小是10,在檢測(cè)是否需要擴(kuò)容后,如果擴(kuò)容,會(huì)擴(kuò)容為原來(lái)的1.5倍大小。原理就是把老數(shù)組的元素存儲(chǔ)到新數(shù)組里面
ArrayList的查找快,增刪慢,因?yàn)榈讓邮菙?shù)組,適用于查找元素。LinkedList底層是雙鏈表,增刪快,查找慢。
-
相同點(diǎn):LinkedList和ArrayList的數(shù)據(jù)存儲(chǔ)都是有序的,而且元素是可以重復(fù)的。
兩者add都是將元素追加到現(xiàn)有集合元素的末尾。
三、Collection和Collections的區(qū)別
1、java.util.Collection 是一個(gè)集合的頂級(jí)接口。它提供了對(duì)集合對(duì)象進(jìn)行基本操作的通用接口方法。Collection接口在Java 類庫(kù)中有很多具體的實(shí)現(xiàn)。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式。List,Set,Queue接口都繼承Collection
2、java.util.Collections 是一個(gè)集合的工具類。 它包含有各種有關(guān)集合操作的靜態(tài)方法(對(duì)集合的搜索、排序、線程安全化等),大多數(shù)方法都是用來(lái)處理線性表的。此類不能實(shí)例化,就像一個(gè)工具類,服務(wù)于Java的Collection框架。
四、Comparable和Comparator的區(qū)別
- Comparable在java.lang包里,Comparator在java.util包里
- Comparable是自然排序接口(默認(rèn)排序接口),Comparator是自定義排序接口
- Comparable是比較的意思,接口中實(shí)現(xiàn)了CompareTo方法。Comparator是比較器的意思,要先定義一個(gè)自定義比較器類,該類實(shí)現(xiàn)Comparator接口,重寫compare(T t1,T t2)比較方法。 即為:Comparable 必須由自定義類內(nèi)部實(shí)現(xiàn)排序方法,而 Comparator 是外部定義并實(shí)現(xiàn)排序的。
五、entrySet和keySet的區(qū)別
entrySet和keySet都是Map集合中的一種迭代方式。
-
KeySet():
Map集合遍歷方式是鍵找值:即通過元素中的鍵,獲取鍵所對(duì)應(yīng)的值Map集合的鍵集是一個(gè)Set集合遍歷Set集合,分別取出key,通過key找到value
-
entrySet()方法:
用于返回Map集合中所有的鍵值對(duì)(Entry)對(duì)象,以Set集合形式返回。
遍歷set集合得到
Entry<String , String>對(duì)象Entry<String , String>對(duì)象調(diào)用getKey()得到 keyEntry<String , String>對(duì)象調(diào)用getValue()得到 value
六、字節(jié)流與字符流的區(qū)別
字節(jié)流:以字節(jié)(byte)為單位輸入輸出,字節(jié)流按照8位傳輸
字符流:以字符(char)位單位輸入輸出,字符流按照16位傳輸
七、final finalize finally的區(qū)別
Final修飾變量、方法、類。修飾變量時(shí)變量不能改值,修飾方法時(shí)方法不能被重寫,修飾類時(shí)類不允許被繼承。
Finalize是方法,定義在Object類中,用于對(duì)象銷毀時(shí),由GC進(jìn)行調(diào)用。
Finally:表示代碼塊,與try進(jìn)行配合使用,無(wú)論try塊中的代碼是否正常執(zhí)行,都將執(zhí)行finally塊中的代碼。
八、HashMap和Hashtable有什么區(qū)別
HashMap去掉了Hashtable的contains方法
Hashtable是線程安全的,效率低,HashMap是非線程安全的,效率高
HashMap允許有一個(gè)null的鍵,Hashtable不允許鍵為null,值也不允許為null
九、HashMap 和 HashSet 區(qū)別
- HashMap實(shí)現(xiàn)了Map接口,而HashSet實(shí)現(xiàn)了Set接口
- HashMap用于存儲(chǔ)鍵值對(duì),而HashSet用于存儲(chǔ)對(duì)象
- HashMap不允許有重復(fù)的鍵,可以允許有重復(fù)的值。HashSet不允許有重復(fù)元素
- HashMap允許有一個(gè)鍵為null,多個(gè)值為null,HashSet允許有一個(gè)null
- HashMap中使用put()將元素加入map中,而HashSet使用add()將元素放入set中
十、BIO、NIO、AIO有什么區(qū)別?
- BIO:Blocking IO 同步阻塞式IO,就是我們平時(shí)使用的傳統(tǒng)IO,它的特點(diǎn)是模式簡(jiǎn)單,使用方便,并發(fā)處理能力低。
- NIO:Non Blocking IO 同步非阻塞IO,是傳統(tǒng)IO的升級(jí),客戶端和服務(wù)端通過Channel(通道)通訊,實(shí)現(xiàn)了多路復(fù)用。
- AIO:Asynchronous IO 是NIO的升級(jí),也叫NIO2,實(shí)現(xiàn)了異步非阻塞,是基于回調(diào)機(jī)制的IO。