728x90
★ MyArrayList 클래스를 구현
- 조건
- 1. 행동
- boolean add(String value)
- Append 모드로 배열의 맨 끝에 요소를 추가한다.
- value: 추가할 요소
- return: 성공 유무
- String get(int index)
- 원하는 위치에 있는 요소를 가져온다.
- index: 가져올 요소의 위치
- return: 가져올 요소의 값
- int size()
- 요소의 개수를 반환한다.
- return: 요소의 개수
- String set(int index, String value)
- 원하는 위치의 요소를 다른 값으로 수정한다.
- index: 수정할 요소의 위치
- value: 수정할 요소의 값
- return: 수정하기 전 요소의 값
- String remove(int index)
- 원하는 위치의 요소를 삭제한다.
- index: 삭제할 요소의 위치
- return: 삭제된 요소의 값
- boolean add(int index, String value)
- Insert 모드로 원하는 위치에 요소를 삽입한다.
- index: 수정할 요소의 위치
- value: 수정할 요소의 값
- return: 성공 유무
- int indexOf(String value)
- 원하는 요소가 몇번째 위치에 있는지 위치값을 반환한다.
- value: 검색할 요소의 값
- return: 검색된 요소의 위치
- int lastIndexOf(String value)
- 원하는 요소가 몇번째 위치에 있는지 위치값을 반환한다.
- value: 검색할 요소의 값
- return: 검색된 요소의 위치
- void clear()
- 배열의 모든 요소를 삭제한다.
- void trimToSize()
- 배열안의 요소의 개수만큼 배열의 길이를 줄인다.
- boolean add(String value)
- 2. 소스 코드
public class MyArrayList {
private String[] list; //보조
private int index; //************** 주인공 > 현재 데이터가 들어갈 방번호
//배열 선언 방식
public MyArrayList() {
this.list = new String[4];
this.index = 0;
}
//배열 선언 방식 2
public MyArrayList(int value) {
this.list = new String[value];
this.index = 0;
}
//배열의 맨 끝에 요소를 추가한다.
public boolean add(String value) {
//인자값을 배열에 차례대로 넣기 > Append
//검사 > 방이 모자란지? > 배열 2배 확장(깊은 복사)
if(checkList()) {
doubleList();
}
this.list[this.index] = value;
this.index++;
return true;
}
//index의 길이가 현재 list의 길이와 같은지 즉, 방이 꽉찼는지 검사
public boolean checkList() {
if(this.index == this.list.length) {
return true;
}
return false;
}
//배열의 길이가 꽉 찼다면, 배열의 길이를 2배로 늘려주는 연산
public void doubleList() {
String[] temp = new String[this.list.length*2];
for(int i=0; i<this.list.length; i++) {
temp[i] = this.list[i];
}
this.list = temp;
}
//배열에 현재 넣은 데이터의 개수를 출력
public int size() {
//배열 길이(x) > 여태 넣은 데이터의 개수(O)
return this.index;
}
//원하는 위치의 요소를 다른 값으로 수정
public String get(int index) {
if(checkIndex(index)) {
return this.list[index];
}
else {
return "올바른 인덱스 값을 넣어주세요";
}
}
//index의 값을 제대로 입력했는지 검사
public boolean checkIndex(int index) {
if(index >= 0 && index < this.index) {
return true;
}
return false;
}
//원하는 위치의 요소를 다른 값으로 수정
public String set(int index, String value) {
if(checkIndex(index)) {
String beforeValue = "";
this.list[index] = beforeValue;
this.list[index] = value;
return beforeValue;
}else {
return "올바른 인덱스 값을 넣어주세요";
}
}
//원하는 위치의 요소를 삭제
public String remove(int index) {
if(checkIndex(index)) {
String beforeValue = "";
beforeValue = this.list[index];
for(int i=index; i<this.list.length-2; i++) {
this.list[i] = this.list[i+1];
}
this.index--;
return beforeValue;
}
return "올바른 인덱스 값을 넣어주세요";
}
//원하는 위치에 요소를 삽입
public boolean add(int index, String value) {
if(checkList()) {
doubleList();
}
for(int i=this.list.length-2; i>=index; i--) {
this.list[i+1] = this.list[i];
}
this.list[index] = value;
this.index++;
return true;
}
//원하는 요소가 몇번째 위치에 위치하는지 위치값을 반환
public int indexOf(String value) {
for(int i=0; i<this.index; i++) {
if(this.list[i].equals(value)) {
return i;
}
}
return -1;
}
//원하는 요소가 뒤에서 몇번째 위치하는지 위치값을 반환
public int lastIndexOf(String value) {
for(int i=0; i<this.index; i++) {
if(this.list[i].equals(value)) {
return this.index - i;
}
}
return -1;
}
// 배열의 모든 요소를 삭제
public void clear() {
String [] temp = new String[4];
this.list = temp;
this.index = 0;
}
// 배열안의 요소의 개수만큼 배열의 길이를 줄인다.
public void trimToSize() {
String [] temp = new String[index];
for(int i=0; i<this.index; i++) {
temp[i] = this.list[i];
}
this.list = temp;
}
// 배열안의 요소를 모두 출력
public void allSearch() {
if(index!=0) {
for(int i=0; i<index; i++) {
System.out.printf("[%d번째] : %s\n", i, this.list[i]);
}
}else {
System.out.println("배열이 비어 있습니다.");
}
}
//현재 진행 상황 확인 작업
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(String.format("index : %d\n", this.index));
sb.append(String.format("length : %d\n", this.list.length));
for(int i=0; i<this.list.length; i++) {
sb.append(String.format("\t%d : %s\n",i , list[i]));
}
return sb.toString();
}
}
public class Q0104 {
public static void main(String[] args) {
//배열 생성
MyArrayList list = new MyArrayList();
//추가
list.add("홍길동");
list.add("아무개");
list.add("하하하");
list.add("가가가");
list.add("나나나");
//System.out.println(list);
//읽기
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.get(2));
System.out.println();
//개수
System.out.println(list.size());
System.out.println();
//탐색 + 읽기
for (int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println();
//수정
list.set(0, "우하하");
System.out.println(list.get(0));
System.out.println();
//삭제
list.remove(1);
for (int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println();
//삽입
list.add(1, "호호호");
for (int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println();
//검색
if (list.indexOf("홍길동") > -1) {
System.out.println("홍길동 있음");
} else {
System.out.println("홍길동 없음");
}
System.out.println();
//전체 조회
list.allSearch();
System.out.println();
//초기화
list.clear();
System.out.println(list.size());
System.out.println();
//전체 조회
list.allSearch();
System.out.println();
}
}
- 실행결과
728x90
'자바' 카테고리의 다른 글
JAVA STEP 35. Queue&Stack 직접 구현하기 (0) | 2023.02.23 |
---|---|
JAVA STEP 34. 컬렉션(Queue&Stack) (0) | 2023.02.23 |
JAVA STEP 32. 컬렉션(ArrayList) (0) | 2023.02.23 |
JAVA STEP 31. abstract&Object&Generic (0) | 2023.02.22 |
JAVA STEP 30. Interface (0) | 2023.02.21 |