2025-02-09

一、散列表類與性能優化線程同步散列表類
1、Vector 與ArrayList
對於線程安全而言,一些散列表核心類是線程安全的,如Vector類,一些核心類不是線程安全的,如ArrayList類。
原則:對線程安全有嚴格要求時,盡量選用線程安全的散列表類,在不要求的情況下,盡量選用非線程安全的散列表類,因為線程安全的散列表會將本來可以並行處理的任務的多線程進行排隊。當這些線程試圖並行訪問該散列表對象時,會被轉為串行處理。

2、設置ArrayList初始化容量
ArrayList給新添加的元素提供必要的存儲空間,需要增加自身的內部數據結構,這個過程由系統自動完成。但如果數組很大,需要提高添加元素的性能
先看一個例子

Java代碼
public class SetArraySize{ 
    final int N = 1000000; 
    Object obj=new Object(); 
    ArrayList list = new ArrayList(); 
    long startTime = System.currentTimeMills(); 
    for(int i=1; i<N; i ){ 
        list.add(obj); 
   } 
    long  endTime = System.currentTimeMills();  
   System.out.println(“沒有ensucreCapacity耗時:” (endTime-startTime)     ms);  
    list = new ArrayList(); 
    long startTime = System.currentTimeMills(); 
    list.encrureCapacity(N); 
    for(int i=1; i<N; i ){ 
        list.add(obj); 
   } 
    long  endTime = System.currentTimeMills(); 
   System.out.println(“調用ensucreCapacity耗時:” (endTime-startTime) ms); 
}
public class SetArraySize{
    final int N = 1000000;
    Object obj=new Object();
    ArrayList list = new ArrayList();
    long startTime = System.currentTimeMills();
    for(int i=1; i<N; i ){
        list.add(obj);
   }
    long  endTime = System.currentTimeMills();

   System.out.println(“沒有ensucreCapacity耗時:” (endTime-startTime)     ms);

    list = new ArrayList();
    long startTime = System.currentTimeMills();
    list.encrureCapacity(N);
    for(int i=1; i<N; i ){
        list.add(obj);
   }
    long  endTime = System.currentTimeMills();

   System.out.println(“調用ensucreCapacity耗時:” (endTime-startTime) ms);
}
運行結果:
   沒有ensucreCapacity耗時:172ms
   調用ensucreCapacity耗時:63ms

提前調用ensucreCapacity,系統性能大大提高

3、ArrayList與LinkedList
ArrayList通過內部數組結構Object[]實現,而LinkedList通過一系列的內部記錄連接在一起實現,不同場合的應用,性能差別較大

二、String類與性能優化
1、字符串累加與性能優化
StringBuffer.append累加字符串比 或 =累加性能高很多,數值越大,差別越大

2、字符串的lentht()與性能優化
在循環外就計算好字符串的長度int len=s.length(),不要在循環中用for(int i=0;i<s.length();i ).每循環一次都要計算長度,必然耗系統資源

3、toCharArray()
調用toCharArray()將字符串轉為數組,通過數組索引值獲取指定位置的字符,比用charAt()逐一獲取特定位置的字符性能提高

4、字符串轉為數字
d=new Double(“8.97”);
d=new Double(8.97); 第二種寫法比第一種寫法性能高很多倍

三.系統I/O類
1、通過系統緩沖流提高I/O操作效率

2、自定制緩沖區提高I/O操作效率更大程度提升系統性能。

3、通過壓縮流提高I/O操作效率
ZipOutputStream

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *