자바

JAVA STEP 33. ArrayList 직접 구현하기

2023. 2. 23. 14:36
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()
      • 배열안의 요소의 개수만큼 배열의 길이를 줄인다.
  • 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();
		
	}

	
}

 

  • 실행결과

실행결과 1
실행결과 2

 

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
'자바' 카테고리의 다른 글
  • JAVA STEP 35. Queue&Stack 직접 구현하기
  • JAVA STEP 34. 컬렉션(Queue&Stack)
  • JAVA STEP 32. 컬렉션(ArrayList)
  • JAVA STEP 31. abstract&Object&Generic
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
Developer Story HouseIT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • jquery
  • java
  • 코딩테스트
  • 알고리즘
  • ajax
  • React
  • 데이터베이스
  • 웹개발
  • 정보보안전문가
  • IT개발자
  • jsp
  • 웹개발자
  • 백엔드
  • it
  • html
  • 웹페이지
  • JavaScript
  • 자바
  • 백준
  • 프론트엔드
  • 개발블로그
  • 개발자
  • DBA
  • 정보처리기사
  • IT자격증
  • IT자격증공부
  • DB
  • 정보처리기사필기
  • css
  • 앱개발자

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
JAVA STEP 33. ArrayList 직접 구현하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.