1. 程式人生 > >Java高階篇 -- List選擇及優化

Java高階篇 -- List選擇及優化

在java程式設計中,我們常常使用到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):在指定索引位置新增元素,新增在中間位置時,後面的元素依次往後移置,新增的位置可以在最後一位,但