개발의 시작과 끝
2020.03.10 / Day - 26 자바 ArrayList 복습 본문
bbm - 13일차
ArrayList 예제 3 - 배열길이 자동증가 → 교체
class Main {
public static void main(String[] args) {
ArrayList ar = new ArrayList();
ar.add(100);
ar.add(200);
ar.add(300);
ar.add(400);
int value = ar.get(0);
System.out.println(value);
// 출력 : 100
value = ar.get(1);
System.out.println(value);
// 출력 : 200
value = ar.get(2);
System.out.println(value);
// 출력 : 300
value = ar.get(3);
System.out.println(value);
// 출력 : 400
}
}
class ArrayList {
int[] datas;
int lastIndex = -1;
ArrayList() {
datas = new int[3]; // 이 부분은 수정할 수 없습니다.
}
void add(int data) {
lastIndex++;
// 확장공사
if(lastIndex >= datas.length) {
// 늘어난 데이터를 새로 저장할 수 있는 공간을 생성함
int[] newDatas = new int[datas.length * 2];
// 새로만들어진 공간에 기존 데이터를 옮기는 작업
for (int i = 0; i < datas.length; i++) {
newDatas[i] = datas[i];
}
datas = newDatas;
}
datas[lastIndex] = data;
}
int get(int index) {
return datas[index];
}
}
ArrayList에서 데이터가 늘어났을 때 확장공사를 하는데
이는 증가된 데이터를 기존 데이터 공간을 버리고 새로운 데이터 공간을 만들어 교체하는 작업이다.
newData라는 새로운공간은 기존 datas보다 2배를 저장할 수 있다.
데이터 공간만 새로 만들면 기존에 저장되어 있던 데이터들이 모두 없어질 수있기 때문에 옮기는 작업을 해줘야 한다.
그러면 기존에 저장되어 있던 데이터들을 포함해 늘어난 데이터를 모두 새로운 공간인 newDatas에 저장할 수 있다.
ArrayList 예제 4 - size 함수
int size() {
return lastIndex + 1;
}
size 함수는 add가 실행된 횟수이다.
ArrayList 예제 5 - remove 함수
ar.add(100);
ar.add(200);
ar.add(300);
ar.add(400);
ar.remove(2);
int value = ar.get(2);
System.out.println(value);
// 출력 : 400
ar.remove(0);
value = ar.get(0);
System.out.println(value);
// 출력 : 200
void remove(int index) {
for ( int i = index; i < lastIndex; i++ ) {
datas[i] = datas[i + 1];
}
lastIndex--;
}
ex)
100 200 300 400
0 1 2 3
remove 300
0 1 2 3
100 200 400 400
remove 100
0 1 2 3
200 400 400 400
remove 함수는 기존의 방에 있던 데이터를 지우는 함수이다.
데이터를 지우게 되면 그 다음 방에 저장돼 있던 데이터들이 앞으로 하나씩 밀려오게 된다.
for ( int i = index; i < lastIndex; i++ ) {
datas[i] = datas[i + 1];
}
lastIndex--;
ArrayList 예제 5 - addAt 함수
class Main {
public static void main(String[] args) {
ArrayList ar = new ArrayList();
ar.add(100, 0);
ar.add(200, 1);
ar.add(300, 2);
ar.add(400, 3);
ar.add(500, 4);
ar.add(600, 2); // 2번좌석으로 새치기, 기존의 2번좌석 손님부터 끝 손님까지 뒤로 한칸씩 밀린다.
ar.add(700, 0); // 0번좌석으로 새치기, 기존의 0번좌석 손님부터 끝 손님까지 뒤로 한칸씩 밀린다.
for ( int i = 0; i < ar.size(); i++ ) {
int value = ar.get(i);
System.out.println(i + " : " + value);
}
// 출력
// 0 : 700
// 1 : 100
// 2 : 200
// 3 : 600
// 4 : 300
// 5 : 400
// 6 : 500
}
}
class ArrayList {
int[] datas;
int lastIndex = -1;
ArrayList() {
datas = new int[3]; // 이 부분은 수정할 수 없습니다.
}
void add(int data, int index) {
lastIndex++;
if ( lastIndex >= datas.length ) {
// 확장공사
// 기존버스 버리고 새 버스로 연결!!
// datas 이 녀석이 기존 버스를 버리고 새 버스를 가리켜야 합니다.
// 새 버스 생성
int[] newArr = new int[datas.length * 2];
// 기존 버스(배열)를 버리기 전에 버스에 있던 승객들을 새 버스로 옮긴다.
for ( int i = 0; i < datas.length; i++ ) {
newArr[i] = datas[i];
}
datas = newArr;
}
for(int i = lastIndex; i > index; i--) {
datas[i] = datas[i - 1];
}
datas[index] = data;
}
void add(int data) {
lastIndex++;
if ( lastIndex >= datas.length ) {
// 확장공사
// 기존버스 버리고 새 버스로 연결!!
// datas 이 녀석이 기존 버스를 버리고 새 버스를 가리켜야 합니다.
// 새 버스 생성
int[] newArr = new int[datas.length * 2];
// 기존 버스(배열)를 버리기 전에 버스에 있던 승객들을 새 버스로 옮긴다.
for ( int i = 0; i < datas.length; i++ ) {
newArr[i] = datas[i];
}
datas = newArr;
}
datas[lastIndex] = data;
}
int get(int index) {
return datas[index];
}
int size() {
return lastIndex + 1;
}
}
기존 방 번호에서 새치기를 하여 방 번호를 바꾸는 것이다.
for ( int i = lastIndex; i > index; i-- ) {
datas[i] = datas[i - 1];
}
'자바 복습' 카테고리의 다른 글
2020.03.11 / Day - 27 자바 제너릭 복습 (0) | 2020.03.11 |
---|---|
2020.03.10 / Day - 26 자바 ArrayList 복습 (0) | 2020.03.10 |
2020.03.09 / Day - 25 자바 ArrayList 복습 (0) | 2020.03.09 |
2020.03.08 / Day - 24 자바 ArrayList 복습 (0) | 2020.03.08 |
2020.03.07 / Day - 23 자바 배열 재 복습 (0) | 2020.03.07 |