본문 바로가기
IT/JAVA

자바 arrayList

by 지니라 2017. 3. 30.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

JAVA ArrayList


JAVA JCF(Java Collection Framework)의 ArrayList는 JAVA 개발시 자주 사용되는 것 자료구조인데 성능에 연관된 개발이라면 다음을 주의하자.

1. 요소를 추가/삽입 할때는 뒤쪽에 삽입하자.
- add(E)
- add(int, E)
- addAll(List)
- addAll(int, List)

- 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)
- 이 메소드는 JAVA6, JAVA7에서 내부적으로 다르게 동작하는데, JAVA6에서는 AbstractList로 정의하여 recursion call을 사용하는 반면, JAVA7에서는 ArrayList.subList 메소드를 호출하여 sublist를 만든다.

그러므로 JAVA6, JAVA7의 큰차이는 내부적으로 recursion call을 하는냐의 차이인데, JAVA7에서는 recursion call에 대해 고민할 필요는 없으므로 JAVA7에서는 subList(int, int).clear등을 사용하여 삭제한다면 성능에 무리가 없다.


출처 : http://www.oraclejavanew.kr/

'IT > JAVA' 카테고리의 다른 글

자바 DateUtils.java  (0) 2017.03.30
자바 stringBuffer va stringBuilder vs string  (0) 2017.03.30
자바 stringBuffer va stringBuilder vs string  (0) 2017.03.30
자바 Session 세션  (0) 2017.03.30
자바 stringUtils.java  (0) 2017.03.30