1) 都是 final 類, 都不允許被繼承;
2) String 長度是不可變的, StringBuffer、StringBuilder 長度是可變的;
3) StringBuffer 是線程安全的, StringBuilder 不是線程安全的。
4) 在效率上,StringBuilder比StringBuffer更快
如果字符串不需要改變就使用
String,如果字符串需要改變就使用StringBuffer或者StringBuilder,在StringBuffer和StringBuilder之間做選擇時,如果涉及到多線程就使用StringBuffer,如果不涉及到多線程就使用StringBuilder(因為他更快)。
1) new Integer()方法會在內存中新開辟一個內存空間;
2)valueOf()方法只有在傳入的參數小于-128或大于127時,才會去調用一個new Integer()方法去創建一個新的對象,否則會使用靜態類IntegerCache中的cache里的對象。
可以通過啟動參數-XX:AutoBoxCacheMax修改掉valueOf()緩存數字大范圍,但大值也不會超過:
Integer.MAX_VALUE +128
PS:int和Integer的主要區別:一個是基本數據類型,一個是對象(不進行初始化的情況下,int的默認值是0,而Integer的初始值是null,Integer是int的包裝類)
1) Vector、ArrayList是使用數組實現的,LinkedList是使用鏈表實現的
2)Vector是線程安全的,LinkedList、ArrayList不是線程安全的
如果涉及到多線程,那么就選擇
Vector,如果不涉及到多線程就從LinkedList、ArrayList中選。LinkedList更適合從中間插入或者刪除(鏈表的特性)。ArrayList更適合檢索和在末尾插入或刪除(數組的特性)。
PS: Collections.synchronizedList(List list)方法也可以用來返回一個線程安全的List。參見SynchronizedList和Vector的區別
1) HashMap和HashTable都實現了Map接口,ConcurrentHashMap實現了ConcurrentMap接口
2) HashMap 和 ConcurrentHashMap 都繼承了AbstractMap類,HashTable繼承了Dictionary類
3)HashTable和ConcurrentHashMap是線程安全的,HashMap不是線程安全的。
4) 當一個線程訪問HashTable的同步方法時,其他線程訪問HashTable的同步方法時,可能會進入阻塞或輪詢狀態。
5) ConcurrentHashMap使用鎖分段技術,將數據分成一段一段的存儲,給每一段數據配一把鎖,當一個線程占用鎖訪問其中一個段數據的時候,其他段的數據也能被其他線程訪問。
如果不涉及到多線程處理的情況,就是用hashMap,因為他的效率比較高。在有并發請求的場景中,如果數據的強一致性比較重要,那么就請使用hashTable,因為ConcurrentHashMap的get,clear,iterator 都是弱一致性的。如果效率要求比較高,那么就使用ConcurrentHashMap,因為他不會像hashTable那樣產生阻塞。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。