코드예시
class Main { public static void main(String[] args) { // ArrayList 인스턴스 생성 ArrayList al = new ArrayList();
// ArrayList에 각각 다른 타입의 데이터 추가
al.add(10); // 정수 타입
al.add(true); // 불리언 타입
al.add(new 사람()); // 사용자 정의 클래스 타입
// ArrayList에서 각 데이터를 추출하고 타입 변환
int a = (int)al.get(0); // 형변환 필요
boolean b = (boolean)al.get(1); // 형변환 필요
사람 c = (사람)al.get(2); // 형변환 필요
}
}
// ArrayList 클래스 정의
class ArrayList {
private Object[] datas; // Object 타입의 배열
private int lastIndex; // 마지막 요소의 인덱스를 추적하는 변수
// ArrayList 생성자 메서드
public ArrayList() {
datas = new Object[3]; // 초기 배열 길이 3
lastIndex = -1; // 아직 데이터가 없으므로 -1
}
// 객체의 문자열 표현을 반환하는 toString 메서드 재정의
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
// 배열 요소를 모두 문자열로 연결
for ( int i = 0; i <= lastIndex; i++ ) {
sb.append(i + ",");
}
return sb.toString(); // 연결된 문자열 반환
}
// 데이터 배열 크기를 2배로 확장하는 메서드
private void sizeUpDatas() {
// 현재 배열 크기의 2배인 새로운 배열 생성
Object[] newDatas = new Object[datas.length * 2];
// 이전 배열의 요소를 새 배열로 복사
for ( int i = 0; i < datas.length; i++ ) {
newDatas[i] = datas[i];
}
// 새 배열로 참조 변경
datas = newDatas;
}
// 배열이 가득 찼을 때 크기를 늘리는 메서드
private void sizeUpDatasIfFull() {
if ( isFull() ) {
int oldDatasLength = datas.length;
sizeUpDatas(); // 배열 크기 늘리기
int newDatasLength = datas.length;
System.out.println("배열 증가 : " + oldDatasLength + " => " + newDatasLength);
}
}
// 데이터를 배열 끝에 추가하는 메서드
public void add(Object data) {
sizeUpDatasIfFull(); // 배열이 가득 차면 크기를 늘림
lastIndex++; // 마지막 인덱스 증가
datas[lastIndex] = data; // 데이터 추가
}
// 특정 인덱스에 데이터를 추가하는 메서드
public void add(Object data, int index) {
sizeUpDatasIfFull(); // 배열이 가득 차면 크기를 늘림
// 인덱스 뒤의 요소들을 뒤로 한 칸씩 이동
for ( int i = lastIndex; i >= index; i-- ) {
datas[i + 1] = datas[i];
}
datas[index] = data; // 해당 인덱스에 데이터 추가
lastIndex++; // 마지막 인덱스 증가
}
// 특정 인덱스의 데이터를 반환하는 메서드
public Object get(int index) {
return datas[index]; // 해당 인덱스의 데이터 반환
}
// 배열이 가득 찼는지 여부를 반환하는 메서드
private boolean isFull() {
return lastIndex + 1 == datas.length; // 배열의 길이와 마지막 인덱스를 비교하여 반환
}
// 현재 요소의 개수를 반환하는 메서드
public int size() {
return lastIndex + 1; // 마지막 인덱스에 1을 더하여 요소의 개수 반환
}
// 특정 인덱스의 데이터를 제거하는 메서드
public void removeAt(int index) {
// 해당 인덱스부터 끝까지의 요소들을 한 칸씩 앞으로 이동
for ( int i = index; i < lastIndex; i++ ) {
datas[i] = datas[i + 1];
}
lastIndex--; // 마지막 인덱스 감소
}
// 모든 데이터를 출력하는 메서드
public void showAllValues() {
System.out.println("== 전체 데이터 출력 ==");
// 모든 요소를 인덱스와 함께 출력
for ( int i = 0; i <= lastIndex; i++ ) {
System.out.println(i + " : " + datas[i]);
}
}
}
// 사람 클래스 정의
class 사람 {
}