Java高階篇 -- List選擇及優化
以下為幾點簡單的優化建議:
1.Vector還是ArrayList
Vector有其特有有點,其每個方法都為同步方法【synchronized】,所以是執行緒安全的,在多執行緒環境下,若多個程序同時訪問受保護資源,用Vector就顯得十分簡潔,安全。
ArrayList為非執行緒安全的,若不是多執行緒環境,或多執行緒環境下資源不需要寫、更新,只需要讀取,使用,或資源不需要受保護,使用ArrayList就大大提高了效率。
執行緒安全的散列表將本來可以並行處理的任務進行排隊,序列處理。
同樣:Hashtable是執行緒安全的,HashMap是非執行緒安全的
2.設定ArrayList初始化容量
ArrayList不斷增長過程中會自動擴增其空間,這無疑耗費一定的資源,時間。
如果已經預料到ArrayList將是一個很大的陣列,並且你預料到它將變得異常龐大,可預先設定陣列的大小,可以提高新增新元素的速度,並優化效能。
原來ArrayList list=new ArrayList();
現在ArrayList list=new ArrayList();
list.ensureCapacity(N);
3.ArrayList與LinkedList
二者功能相當,但內部實現的資料結構不同
ArrayList通過object[]實現,LinkedList通過連結串列。
由此易得:
ArrayList:隨機訪問,順序新增效率均高於LinkedList,只要用於變動較小的集合儲存
對其新增、刪除某位置元素,將移動所有後方元素,效率太低
LinkedList:在某個位置增刪效率較高,用於變動較為頻繁的集合儲存
4.遍歷
若List不發生大小變動【迴圈中無remove,add操作】,即不用每次檢測其大小
原來:
for (int i = 0; i < vector.size (); i++)
改為:
for (int i = 0,n=list.size (); i < n; i++)
不用每次迴圈都檢測其大小,效率將大大提高
5.使用
除非十分必要,否則儘量使用java提供的集合,不要自己書寫功能類似的方法
相關推薦
Java高階篇 -- List選擇及優化
在java程式設計中,我們常常使用到java自帶的集合類List 以下為幾點簡單的優化建議: 1.Vector還是ArrayList Vector有其特有有點,其每個方法都為同步方法【synchronized】,所以是執行緒安全的,在多執行緒環境下,若多個程序同時訪問受保護資源,用Vector就顯得
Java提高篇——理解String 及 String.intern() 在實際中的應用
部分 In 實例 補充 targe java 默認 target 常量池 1. 首先String不屬於8種基本數據類型,String是一個對象。 因為對象的默認值是null,所以String的默認值也是null;但它又是一種特殊的對象,有其它對象沒有的一些特性。
Java高階篇(四)——反射
之前寫到了設計模式的代理模式,因為下一篇動態代理等內容需要用到反射的知識,所以在之前Java篇的基礎上再寫一篇有關反射的內容,還是以實際的程式為主,瞭解反射是做什麼的、應該怎麼用。 一、什麼是反射 反射就是把Java類中的各個成分對映成一個個的Java物件。即在執行狀態中,對於任意一個類,都能夠知道這
Java高階篇-1-Java基礎知識快速過一遍
在學習Java高階部分知識之前,我們來簡單梳理一下Java基礎語法部分的知識,不會太全,但是基本的,常用到的一一複習一下。 1.Java編碼規範 在這裡,還是要強調Java編碼標準或者規範。以前,我寫程式碼或者指令碼不多,也不知道這個重要性。突然
Java高階篇-2-裝箱和拆箱的基本概念
前面一篇的結尾,我們畫了一張圖,對Java的資料型別進行了分類。其中,有8種基本資料型別,還有引用型別。我們先來看看下面這段程式。 package demo3; /** * create by Anthony on 2017/10/28 */ publ
Java高階篇整理
面試中常常會問及Java細節相關的問題,而由於往往在平時中不會過多的涉及,所以不能得心應手。而通過閱讀課本和網上資料,會有一定的幫助,但紙上得來終覺淺,絕知此事須躬行。以部落格的形式梳理思路,通過一行行程式碼,深入理解Java細節,從而對於Java高階特性進行全面掌握。 Java三大特性 封裝
頁面報OutofMemoryError:Java heap space問題定位及優化
背景:伺服器是windows server 2008 R2系統,點選一個匯出報表功能按鈕,頁面報如下錯: tomcat控制檯裡也報類似的錯誤,下面說一下定位和調優方法———— 定位: 1、開啟cmd控制檯,因為是windows系統,使用ps -ef|grep jav
Java高階篇-5-Arrays類
前面介紹了字串的操作的String類,這篇,我們學習陣列類,Java中提供了一個數組常見操作方法的類Arrays.java。其實前面也說過,String其實原始碼中就是用一個char[]
Java高階篇-0-為什麼要掌握Java高階篇知識
好長時間了,就想要花時間系統去學習下Java的高階篇知識,這部分是我個人目前比較欠缺的,而且是急缺的知識。我認為的Java高階篇內容是這樣劃分的:對Java這個程式語言有基本瞭解,基本掌
【魯班學院】面試總結:Java高階篇(上):集合的型別以及重新認識HashMap
1.你用過哪些集合類? 大公司最喜歡問的Java集合類面試題 4
Mysql之索引選擇及優化
## 索引模型 - 雜湊表 - 適用於只有等值查詢的場景,Memory引擎預設索引 - InnoDB支援自適應雜湊索引,不可干預,由引擎自行決定是否建立 - 有序陣列:在等值查詢和範圍查詢場景中的效能都非常優秀,但插入和刪除資料需要進行資料移動,成本太高。因此,只適用於靜態儲存引擎 - 二叉平衡樹:
Java高階個人筆記(判斷List、Map、Set是否為空及效率比較)
//如果object為null,則設定為defaultValue ObjectUtils.defaultIfNull(object, defaultValue); //判斷集合是否為null List<String> list=new ArrayList<
Django基礎篇之數據庫選擇及相關操作
setting 必須 需要 mysql pyc -- creates 127.0.0.1 settings 在djanjo框架中我們最常用的框架分別就是mysql和sqlit了,下面我們將分別講述一下這倆種數據庫的基礎必備知識 mysql 一、利用命令創建(在終端上執行)
Java I/O 操作及優化建議
java.net 底層 str 面向對象 div 選擇 static 右移 linux Java I/OI/O。即 Input/Output(輸入/輸出) 的簡稱。就 I/O 而言。概念上有 5 種模型:blocking I/O,nonblocking I/O。I/O
歸並排序及優化(Java實現)
繼續 soft local == else 歸並排序 right 數據 cal 普通歸並排序 public class MergeSort { /** * @param arr 待排序的數組 * @param left 本次歸並
Java多線程系列 基礎篇05 synchronized底層優化
ase 更多 步驟 才會 stringbu 消耗cpu 影響 out 默認 轉載 http://www.cnblogs.com/paddix/ 作者:liuxiaopeng http://www.infoq.com/cn/articles/java-se-16-synchr
java後臺面試題整理及解答(二)JVM相關篇
ise 可用 檢測 tom 載器 發的 weakref 字節 tomcat 類的實例化順序,比如父類靜態數據,構造函數,字段,子類靜態數據, 先靜態、先父後子。 先靜態:父靜態 > 子靜態 優先級:父類 > 子類 靜態代碼塊 > 非靜態代碼塊 >
java並行程式開發及優化
一、執行緒池 1. 無限制執行緒的缺陷 - 執行緒的建立和關閉需要花費時間。 - 執行緒本身也會佔用記憶體空間,大量的執行緒回收加重GC的壓力。 - 不能有效的控制和管理正在執行的執行緒。 因此在生產環境需要用執行緒池對執行緒進行控制和管理。 2.JDK執行緒池框架
Java基礎篇之順序、選擇、迴圈結構
程式流程 java程式語句執行的順序包括4種基本控制結構:順序結構、選擇結構、迴圈結構、異常處理邏輯結構。 順序結構 Java程式中,語句執行的基本順序按各語句出現的位置先後順序執行,即為順序結構。 例1:順序結構:已知三角形三邊,求三角形面積: pub
java List介面 及 Iterator和ListIterator的區別
List介面是Collection介面的一個子介面,繼承了Colelction中的方法,同時還有自己的方法 主要有以下幾種 1.void add(int index,object element):在指定索引位置新增元素,新增在中間位置時,後面的元素依次往後移置,新增的位置可以在最後一位,但