2013년 10월 6일 일요일

[자바7,JAVA7]ArrayList사용 JAVA TIP(자바팁),자바 JCF JCF(Java Collection Framework)의 ArrayList는 자바개발시 자주 사용되는 것 자료구조인데 ...

[자바7,JAVA7]ArrayList사용 JAVA TIP(자바팁),자바 JCF
 
JCF(Java Collection Framework)의 ArrayList는 자바개발시 자주 사용되는 것 자료구조인데 성능에 연관된 개발이라면 다음을 주의하자.
 
1. 요소를 추가/삽입 할때는 뒤쪽에 삽입하자.
 
- add(E)
- add(int, E)
- addAll(List<E>)
- addAll(int, List<E>)
 
Argument가 하나 있는것은 뒤쪽에 추가하는데 이것을 이용하자. 중간에 끼워 넣는것은 성능에 안좋다.

몇번째에 넣으라는 Argument 두개짜리 메소드는 넣을 공간확보를 위해 그이후의 것을 우측으로 복사(System.arraycopy이용)하고 빈공간을 확보 후 ADD하므로 성능에는 비추천.

2. 요소 삭제
 
- remove(int) : 해당 인덱스의 요소를 석제하고 우측에  있는 것들을 System.arrayCopy를 이용하여 복사하므로 성능에 좋지 않다.
 
- remove(Object) : remove(int)와 비슷하다.
 
- removeAll(Collection), retainAll(Collection) : removeAll은 ArrayList를 반복적으로 뒤져서 해당되는 전체를 삭제, retainAll은 ArrayList를 반복적으로 뒤져 공통되는 것을 남기고 삭제. 내부적으로 contains 메소드를 반복적으로 호출, 성능 별로다.

3. subList(int, int) : 이 메소드는 자바6, 자바7에서 내부적으로 다르게 동작하는데, 자바6에서는 AbstractList로 정의하여 recursion call을 사용하는 반면 자바7에서는 ArrayList.subList 메소드를 호출하여 sublist를 만든다. 그러므로 자바6, 자바7의 큰차이는 내부적으로 recursion call을 하는냐의 차이인데, 자바7에서는 recursion call에 대해 고민할 필요는 없으므로 자바7에서는 subList(int, int).clear등을 사용하여 삭제한다면 성능에 무리가 없을 듯 하다.        

오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  




댓글 없음:

댓글 쓰기