Java基礎題
List和Set比較,各自的子類比較
對比一:Arraylist與LinkedList的比較
1、ArrayList是實現了基於動態陣列的資料結構,因為地址連續,一旦資料儲存好了,查詢操作效率會比較高(在記憶體裡是連著放的)。
2、因為地址連續, ArrayList要移動資料,所以插入和刪除操作效率比較低。
3、LinkedList基於連結串列的資料結構,地址是任意的,所以在開闢記憶體空間的時候不需要等一個連續的地址,對於新增和刪除操作add和remove,LinedList比較佔優勢。
4、因為LinkedList要移動指標,所以查詢操作效能比較低。
適用場景分析:
當需要對資料進行對此訪問的情況下選用ArrayList,當需要對資料進行多次增加刪除修改時採用LinkedList。
對比二:ArrayList與Vector的比較
1、Vector的方法都是同步的,是執行緒安全的,而ArrayList的方法不是,由於執行緒的同步必然要影響效能。因此,ArrayList的效能比Vector好。
2、當Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻倍,而ArrayList只增加50%的大小,這樣。ArrayList就有利於節約記憶體空間。
3、大多數情況不使用Vector,因為效能不好,但是它支援執行緒的同步,即某一時刻只有一個執行緒能夠寫Vector,避免多執行緒同時寫而引起的不一致性。
4、Vector可以設定增長因子,而ArrayList不可以。
適用場景分析:
1、Vector是執行緒同步的,所以它也是執行緒安全的,而ArrayList是執行緒非同步的,是不安全的。如果不考慮到執行緒的安全因素,一般用ArrayList效率比較高。
2、如果集合中的元素的數目大於目前集合陣列的長度時,在集合中使用資料量比較大的資料,用Vector有一定的優勢。
對比三:HashSet與TreeSet的比較
1.TreeSet 是二叉樹實現的,Treeset中的資料是自動排好序的,不允許放入null值 。
2.HashSet 是雜湊表實現的,HashSet中的資料是無序的,可以放入null,但只能放入一個null,兩者中的值都不能重複,就如資料庫中唯一約束 。
3.HashSet要求放入的物件必須實現HashCode()方法,放入的物件,是以hashcode碼作為標識的,而具有相同內容的String物件,hashcode是一樣,所以放入的內容不能重複。但是同一個類的物件可以放入不同的例項。
適用場景分析:
HashSet是基於Hash演算法實現的,其效能通常都優於TreeSet。我們通常都應該使用HashSet,在我們需要排序的功能時,我們才使用TreeSet。
大體回答如上,類似文章請移駕:
HashMap和ConcurrentHashMap的區別
1、HashMap不是執行緒安全的,而ConcurrentHashMap是執行緒安全的。
2、ConcurrentHashMap採用鎖分段技術,將整個Hash桶進行了分段segment,也就是將這個大的陣列分成了幾個小的片段segment,而且每個小的片段segment上面都有鎖存在,那麼在插入元素的時候就需要先找到應該插入到哪一個片段segment,然後再在這個片段上面進行插入,而且這裡還需要獲取segment鎖。
3、ConcurrentHashMap讓鎖的粒度更精細一些,併發效能更好。
大體回答如上,類似文章請移駕:
至於兩者的底層實現,你如果想通過一篇文章就理解了,那就too young了,好好找些博文+看原始碼去吧。
HashTable和ConcurrentHashMap的區別
它們都可以用於多執行緒的環境,但是當Hashtable的大小增加到一定的時候,效能會急劇下降,因為迭代時需要被鎖定很長的時間。因為ConcurrentHashMap引入了分割(segmentation),不論它變得多麼大,僅僅需要鎖定map的某個部分,而其它的執行緒不需要等到迭代完成才能訪問map。簡而言之,在迭代的過程中,ConcurrentHashMap僅僅鎖定map的某個部分,而Hashtable則會鎖定整個map。
大體回答如上,類似文章請移駕:
String,StringBuffer和StringBuilder的區別
1、執行速度,或者說是執行速度,在這方面執行速度快慢為:StringBuilder > StringBuffer > String。
2、執行緒安全上,StringBuilder是執行緒不安全的,而StringBuffer是執行緒安全的。
適用場景分析:
String:適用於少量的字串操作的情況
StringBuilder:適用於單執行緒下在字元緩衝區進行大量操作的情況
StringBuffer:適用多執行緒下在字元緩衝區進行大量操作的情況
大體回答如上,類似文章請移駕:
String、StringBuffer與StringBuilder介紹
wait和sleep的區別
1、sleep()方法是屬於Thread類中的,而wait()方法,則是屬於Object類中的。
2、sleep()方法導致了程式暫停執行指定的時間,讓出cpu給其他執行緒,但是他的監控狀態依然保持著,當指定的時間到了又會自動恢復執行狀態。所以在呼叫sleep()方法的過程中,執行緒不會釋放物件鎖。
3、呼叫wait()方法的時候,執行緒會放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件呼叫notify()方法後本執行緒才進入物件鎖定池準備獲取物件鎖進入執行狀態。
轉載:
https://mp.weixin.qq.com/s?__biz=MzUzMTA2NTU2Ng==&mid=2247484399&idx=1&sn=498a9f0151541d7c3bad2ebccb9aaa2f&chksm=fa497c5ecd3ef5488e6c4cddb24df96725b6147b99bbd485aa1f2c0ddb5d5604ef30026fad0d&key=de1ccb5f17d36506c921d919664438825a1235a753e24a11b1ce3a031c7b378e28090b3fdcffd4b73edbaaeb6562b6f280d4bc67a57e6cb626ac516e2eb54ccf7e5aef241c5043778c8fc78b26d0d479&ascene=0&uin=MTE1MDEyOTYwMA%3D%3D&devicetype=iMac+MacBookPro13%2C1+OSX+OSX+10.12.4+build(16E195)&version=12020810&nettype=WIFI&lang=zh_CN&fontScale=100&pass_ticket=8hfanWIrVdtZ6JsIT2zjCOessVLBtelL6wU308J%2FGjCOe3Il9eKp%2BWWn70JiqUCX
相關文章
- java基礎題(部分)Java
- JAVA 基礎練習題Java
- java基礎面試題Java面試題
- 01.Java基礎問題Java
- Java基礎面試題下Java面試題
- java面試題--基礎上Java面試題
- java基礎簡答題_2Java
- Java面試題-基礎篇一Java面試題
- Java面試題-基礎篇二Java面試題
- Java面試題-基礎篇四Java面試題
- Java面試題-基礎篇五Java面試題
- 面試題之:java基礎1面試題Java
- Java基礎知識面試題Java面試題
- Java面試題基礎篇(一)Java面試題
- Java面試題基礎篇(二)Java面試題
- Java面試題基礎篇(三)Java面試題
- JavaSE-Java基礎面試題Java面試題
- Java基礎題目記錄-01Java
- Java面試題總結之Java基礎(三)Java面試題
- Java基礎面試題整理-50題(附答案)Java面試題
- Java開發常見基礎題大全Java
- 《java程式設計基礎》例題5.6Java程式設計
- Java基礎-語法基礎Java
- JAVA:Java基礎-敲程式碼碰到的小問題Java
- Java面試之Java基礎問題答案口述整理Java面試
- JAVA 基礎Java
- java基礎Java
- [Java基礎]Java
- Java 基礎02Java程式設計基礎Java程式設計
- Android面試之Java基礎筆試題Android面試Java筆試
- Java面試題-基礎篇三(乾貨)Java面試題
- Java基礎-物件導向基礎Java物件
- 【Java面試】Java面試題基礎系列212道(上)Java面試題
- 基礎題
- Java 反射基礎Java反射
- Java基礎 --- 方法Java
- Scanner——Java基礎Java
- java基礎部分Java