ArrayList Code

인철·2023년 10월 13일

Java

목록 보기
40/52

ArrayList

코드예시

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 사람 {
}

profile
같은글이있어도양해부탁드려요(킁킁)

0개의 댓글