-
[ ArrayList ] size(), isEmpty(), add(), addAll() 구현 01JAVA 2022. 12. 5. 16:53728x90
⊙ ArrayList 글 더보기
◆ ArrayList 메서드 직접 구현하기 01
1. MyArrayList 클래스 기본 구성
public class MyArrayList<E> implements List<E> { private Object[] list = new Object[10]; private int size = 0; }- List 인터페이스를 상속 받는 MyArrayList 클래스를 생성한 후 멤버 변수로 Object[]과 int size를 설정
- 배열의 기본 크기는 10으로 잡고 리스트에 추가된 요소 개수(size)가 10이 되면 기존의 2배 크기인 새 배열을 생성하여 값을 복사해준 후 새 배열로 변경
2. 메소드 정리
반환(return) 타입 메서드명 기능 int size() 배열의 사이즈. 즉, 현재 배열에 들어간 요소의 개수 boolean isEmpty() 배열이 비어있으면 true, 값이 하나라도 있으면 false 반환 boolean add(E e) 배열 마지막 요소의 다음 위치에 e를 삽입 void add(int index, E element) 배열 index 위치에 element를 삽입 boolean addAll(Collection c) 매개변수 c의 요소들을 전부 배열에 삽입 boolean addAll(int index, Collection<? extends E> c) 매개변수 c의 요소들을 배열의 index 위치에 모두 삽입 E get(int index) 배열의 index 위치의 요소 반환 boolean remove(Object obj) obj와 일치하는 값인 요소를 배열에서 지우고 지웠으면 true E remove(int index) index 위치에 있는 요소 배열에서 지우고 해당 객체 반환 boolean removeAll(Collection c) c의 값과 일치하는 모든 값을 삭제하면 true 반환 boolean retainAll(Collection<?> c) c의 값과 일치하지 않는 모든 값을 삭제하면 true 반환 void clear() 배열에 있는 요소 모두 삭제 int indexOf(Object obj) obj와 일치하는 요소의 위치 반환. 없으면 -1 반환 int lastIndexOf(Object obj) obj와 일치하는 요소 위치를 뒤에서부터 탐색하여 반환 boolean contains(Object obj) 배열에 obj와 동일한 값이 포함되어 있으면 true, 아니면 false boolean containAll(Collection<?> c) 매개변수 c의 모든 값이 배열에 들어있으면 true, 아니면 false E set(int index, E element) index에 위치에 element를 삽입하고 기존 요소는 반환 Object[] toArray() ArrayList 인스턴스를 일반 배열 타입으로 반환 List<E> subList(int fromIndex, int toIndex) fromIndex부터 toIndex 전까지의 요소를 List 형태로 반환 3. 구현
- size() : 배열의 사이즈. 즉, 현재 배열에 들어간 요소의 개수
☞ length() 메서드는 생성 시 정한 크기(여기선 10)가 반환되므로 요소의 개수를 알 수 없다.
public int size() { return size; }- isEmpty() : 배열이 비어있으면 true, 값이 하나라도 있으면 false 반환
public boolean isEmpty() { return size == 0; }- extentLength() : 배열 요소 개수(size) 확인해서 배열 크기와 같다면 2배 크기로 늘려주기
private void extendLength() { if (size == list.length) { // 배열에 요소가 가득 들어있다면 => 10인 상태일 때 Object[] newList = new Object[size * 2]; for (int i = 0; i < list.length; i++) { newList[i] = list[i]; } list = newList; // 새로 생성 후 새로 assign하기 } }↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
- add(E e) : 배열 마지막 요소의 다음 위치에 e를 삽입
public boolean add(E e) { //배열 기본 길이 확인해서 기본 길이 넘어가면 새로 생성 후 값 넣기 extendLength(); // 위의 메서드 참고 //새 값 추가 list[size] = e; size += 1; return true; }- idxRangeException() : 매개변수에 index가 있으면 배열 범위를 초과하지 않는지 확인하는 메서드
private void idxRangeException(int index) { if (index < 0 || (size != 0 && size <= index)) { throw new IndexOutOfBoundsException(); // 범위 밖이면 예외 던지기 } }↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
- add(int index, E element) : 배열 index 위치에 element를 삽입하고 기존 값들 뒤로 밀기
public void add(int index, E element) { //index 범위 체크 idxRangeException(index); //배열 기본 길이 확인해서 기본 길이 넘어가면 새로 생성 - 메소드로 확인 extendLength(); //끝에서부터 옮기기 if (size > 0) { for (int i = size - 1; i >= index; i--) { list[i + 1] = list[i]; } } //index 위치에 파라미터 넣기 list[index] = element; size++; }- addAll(Collection<? extends E> c) : 매개변수 c의 요소들을 전부 배열에 삽입
public boolean addAll(Collection<? extends E> c) { int oldSize = size; for (Object obj : c) { add((E) obj); // add(Object obj) 메서드 활용 } return size == c.size() + oldSize; }- addAll(int index, Collection<? extends E> c) : 매개변수 c의 요소들을 배열의 index 위치에 모두 삽입
public boolean addAll(int index, Collection<? extends E> c) { //index 범위 체크 idxRangeException(index); int oldSize = size; for (Object obj : c) { add(index, (E) obj); // add(int index, Object obj) 메서드 활용 index += 1; } return size == c.size() + oldSize; }728x90'JAVA' 카테고리의 다른 글
[ LinkedList ] LinkedList란? (0) 2022.12.09 [ Spring ] 스프링 프레임워크란? (0) 2022.12.09 [ ArrayList ] indexOf(), lastIndexOf(), contains(), set(), toArray(), subList(), containsAll() 구현 03 (0) 2022.12.07 [ ArrayList ] get(), remove(), clear(), removeAll(), retainAll() 구현 02 (0) 2022.12.07 [ ArrayList ] ArrayList란? (0) 2022.12.05