java中程式碼優化問題
java中程式碼優化問題
1、根據條件使用符號整型變數
原則:無符號型別:除法和餘數,迴圈計數,陣列下標;有符號型別:整型到浮點的轉化
例如:以“F”或者“f”為字尾(3.14f)的浮點常量才是float型的,否則預設為double型。
unsigned int i; i=i/10;優於int i;i=i/10;
2、大迴圈放裡面小迴圈放外面
for(int i=0;i<5;i++){
.....
for(int j=0;j<10000;j++){
......
}
}
3、與迴圈不相關的儘量放外面
例如...
s=1;
for(int i=0;i<100;i++){
s=s/(k1*k2)
}
變成
s=1;
m=k1*k2;
for(int i=0;i<100;i++){
s=s/m;
}
4、儘量不要在迴圈中使用try{}catch{}
5、迴圈內不要建立大量的臨時變數
例:for(int i=0;i<100;i++){
...
HelloKit helloKit=new HelloKit();
...
}應該變為:
HelloKit helloKit=null;
for(int i=0;i<100;i++){
...
helloKit=new HelloKit();
...
}
6、儘量使用懶載入:即需要時才建立
ArrayList arrayList=new ArrayList();
String str="hello"
if(j==10){
arrayList.add(str);
}
改為:
if(j==10){
String str="hello"
arrayList.add(str);
}
6、複製大量資料時使用System.arraycopy()命令
兩個陣列間的複製儘量不要用迴圈,用java提供的陣列拷貝方法
public void arrayCopy(){
int[] array1= new int[20];
for(int i=0;i<20;i++){
array1=i;
}
int[] array2=new int[20];
System.arraycopy(array1,0,array2,0,20);
for(j=0;j<20;j++){
System.out.println(array2+",");
}
}
7、減少迴圈次數變數的讀取
for(int i=0;i<list.length;i++){
}//這樣每次都會判定i是否到了list.length邊界,每次都需要進行邊界大小的計算
改為:
for(int i=0,j=list.length;i<j;i++){
}//這樣j是區域性變數只需要初始化一次
8、switch()中,常用的case值放前面,不常用的放後面
9儘量使用區域性變數
區域性變數呼叫方法時候傳遞的引數以及在調研中產生的臨時變數都儲存在棧(stack)中,靜態變數,例項變數都是在堆中(Heap)建立,速度較慢。
10、將類中不變的例項靜態化
如果類中的變數不會隨他的例項而變化,就可以定義為靜態變數,從而使得其它所有的例項都共享這個變數
11、儘量指定類的final修飾符
public final void doWork(){ ......
}