[Ace-T의 기초튼튼] for문 잘 알고 쓰자

2013. 12. 16. 16:08Language/Java

반응형

 

 

[Ace-T의 기초튼튼] for문 잘 알고 쓰자


for문을 조금만 수정하면 좋은 성능을 낼 수가 있다.

간단하게 알아보도록 하자.


배열, List, Vector등등 for문안에서 size, length 등을 구하지 말고, 

미리 구한 뒤에 for문 안에서 써먹으면 성능이 좋아짐을 알 수가 있다.


  package kr.pe.acet;

  public class ForTest {


public long forCase01(){        

      int loopCnt = 10000000;

Vector<String> vc = new Vector<String>();

for(int i=0; i > loopCnt; i++){

vc.add("P"+i);

}


Long startTime1=System.nanoTime();

for(int a=0; a < vc.size(); a++){}

Long endTime1=System.nanoTime();

return endTime1 - startTime1;

}

public long forCase02(){        

int loopCnt = 10000000;

Vector<String> vc = new Vector<String>();

for(int i=0; i > loopCnt; i++){

vc.add("P"+i);

}


Long startTime1=System.nanoTime();

int scope = vc.size();

          for(int a=0; a < scope;  a++){}

Long endTime1=System.nanoTime();

return endTime1 - startTime1;

}

}



테스트 코드


package kr.pe.acet;

import static org.junit.Assert.*;


import org.junit.Before;

import org.junit.Test;


public class ForSpeedTest {


ForTest ft =null; 

@Before

public void prepare(){

ft = new ForTest();

}

@Test

public void forCaseTest1() {

long resultTime = 0;

resultTime = ft.forCase01();

System.out.println("forCaseTest1=>"+resultTime);

}

@Test

public void forCaseTest2() {

long resultTime = 0;

resultTime = ft.forCase02();

System.out.println("forCaseTest2=>"+resultTime);

}

}


결과

forCaseTest1=>9853 (0.9초) - for문안에 size를 계속 구하는 형태

forCaseTest2=>1642 (0.1초) - for문 밖에서 size를 한번 구한 형태

데이터가 많아지면 더 큰 차이를 보일 것이다.

2번째 경우처럼 사용하는 습관을 들이도록 해야겠다!!



주저리

 for(int i=0, n=testVoList.size(); i < n; i++) { 형식으로는 

 되는 줄 알았는데..되지 않았다.

반응형