Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- java
- openjdk
- taskkill
- spring #mybatis #오류노트
- SpringMVC
- java StreamAPI
- 백준1330번 #JAVA
- 코테풀이
- JAVA_HOME
- 백준 #JAVA
- 오류노트
- it #web
- cvs 인코딩
- gitdesktop
- mybatis
- 최애의 아이 빵
- 프로그래머스
- 최애의 아이
- 함수형 인터페이스
- 백준_알고리즘연습 #초보개발자 #알고리즘공부
- java #백준
- jdk11
- 코딩테스트
- jsp #spring #java #mabatis #게시판 #시작하기
- 백준
- 빵수집
- 프로그래머스 예산
- Lv1
- gitlab
- 띠부실
Archives
- Today
- Total
1년뒤의나는다르겠지
[JAVA] 배열 ArrayList 본문
ArrayList의 특징
- 동적 크기 : 크기가 가변적으로 변하는 배열입니다.
- 순차적 데이터 저장 : 일반 배열과 유사하게 인덱스로 내부 객체를 관리합니다.
- 타입 안정성 : 제네릭을 사용하여 특정 타입의 객체만 저장할 수 있습니다.
- 중복 허용 : 동일한 요소를 여러번 저장할 수 있습니다.
- 순서보장 : 요소들의 순서가 유지됩니다.
주요 매서드
- [[#add]] 요소추가
- [[#get]] 특정 인덱스 요소 반환
- [[#remove]] 특정 인덱스 요소 제거
- [[#size]] 크기 반환
- [[#clear]] 모든 요소 제거
- [[#contains]] 특정 요소를 포함하는지 확인
- [[#indexOf]] 특정 요소의 인덱스 반환
장점
- 동적 크기 조정 : 요소가 추가됨에 따라 크기가 자동으로 확정되어 유연한 데이터 저장이 가능합니다.
- 빠른 요소 접근 : 인덱스를 사용해 O(1)시간 복잡도로 요소에 빠르게 접근할 수 있습니다.
- 간편한 사용
- 순서 유지 : 요소가 삽입된 순서를 유지함
- 연속된 메모리 : 메모리가 연속적으로 저장되어 캐시 효율성이 좋습니다.
단점
- 삽입 / 삭제 시 성능 저하 : 크기가 가득 차면 배열을 새로 생성하고 복사해야 하므로 성능 저하가 일어날 수 있습니다.
- 메모리 사용 : 동적 배열 할당으로 인해 메모리 사용이 필요.
- 쓰레드 안정성 부족 : 멀티 쓰레드 환경에서 사용할 경우 스레드의 안정성이 보장되지 않습니다.
- 중간 요소 삽입/삭제 비효율 : 리스트 중간에 요소를 삽입, 삭제할 때 해당 위치 이후 모든 요소를 이동시켜야 하므로 비효율적입니다.
데이터의 삽입 삭제가 빈번히 일어날 경우 [[연결리스트]] 더 효율적입니다.
구현부
add
// 끝자리 추가
public void add(T element) {
array[size++] = element;
resize();
}
// 특정 위치에 추가
public void add(int index, T element) {
if (index < 0 || index > size ) {
throw new IndexOutOfBoundsException();
}
for (int i = size-1; i >= index; i--) {
array[i+1] = array[i];
}
array[index] = element;
resize();
}
get
public T get(int index) {
return array[index];
}
size
public int size() {
return size;
}
remove
public T remove(int index) {
if (index < 0 || index > size - 1) {
throw new IndexOutOfBoundsException();
}
T element = array[index];
for (int i = index; i < size - 1; i++) {
array[i] = array[i+1];
}
return element;
}
clear
public void clear(){
size = 0;
array = (T[]) new Object[defaultSize];
}
contains
public boolean contains(T element) {
for (int i = 0; i < size; i++) {
if (array[i].equals(element)) {
return true;
}
}
return false;
}
indexOf
public int indexOf(T element) {
for (int i = 0; i < size; i++) {
if (array[i].equals(element)) {
return i;
}
}
return -1;
}