ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ ArrayList ] indexOf(), lastIndexOf(), contains(), set(), toArray(), subList(), containsAll() 구현 03
    JAVA 2022. 12. 7. 10:19
    728x90


    ⊙ ArrayList 글 더보기

    ◆ ArrayList 메서드 직접 구현하기 03

     

    1. 메소드 정리

    반환(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. 구현

     

    • chkValue(Object item, Object obj) : indexOf()와 lastIndexOf()에서 사용할 값 비교 메소드
    private boolean chkValue(Object item, Object obj) {
        return (obj == null && item == null) || (obj != null && obj.equals(item));
    }

     ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

     

    • indexOf(Object obj) : obj와 일치하는 요소의 위치 반환. 없으면 -1 반환
    public int indexOf(Object obj) {
        // TODO 값이 같은 첫 번째 인덱스 값 반환
        for (int i = 0; i < size; i++) {
            if (chkValue(list[i], obj)) {
                return i;
            }
        }
        return -1; // 같은 값 없으면 -1 반환
    }

     

     

     

     

    • lastIndexOf(Object obj) : obj와 일치하는 요소 위치를 뒤에서부터 탐색하여 반환. 없으면 -1 반환
    public int lastIndexOf(Object obj) {
        // TODO 해당 값과 일치하는 마지막 인덱스 반환
        for (int i = size - 1; i >= 0; i--) {
            if (chkValue(list[i], obj)) {
                return i;
            }
        }
        return -1; // 같은 값 없으면 -1 반환
    }

     

     

     

     

    • contains(Object obj) : 배열에 obj와 동일한 값이 포함되어 있으면 true, 아니면 false
    public boolean contains(Object obj) {
        // TODO 해당 값이 배열에 있는지 검색해서 true/false 반환
        return indexOf(obj) >= 0;
    }

     

     

     

     

     

    • containAll(Collection<?> c) : 매개변수 c의 모든 값이 배열에 들어있으면 true, 아니면 false
    public boolean containsAll(Collection<?> c) {
        // TODO argument 모든 값이 포함 : true / 비포함 : false
        boolean flag = true;
        for (Object obj : c) {
            if (!contains(obj)) { // contains(Object obj) 활용
                flag = false;
                break;
            }
        }
        return flag;
    }

     

     

     

     

    • set(int index, E element) : index에 위치에 element를 삽입하고 기존 요소는 반환
    public E set(int index, E element) {
        // TODO 해당 위치의 값을 새 값으로 교체
        //index 범위 초과 시 예외처리
        idxRangeException(index);
        
        E e = (E) list[index];
        list[index] = element;
        return e;
    }

     

     

     

     

    • toArray() : ArrayList를 배열 형식으로 변환하여 반환. 저장된 요소 타입에 맞춰 형변환 됨
    public Object[] toArray() {
        Object[] arr = new Object[size]; // 값 담고 반환할 배열 생성
        for (int i = 0; i < size; i++) {
            arr[i] = list[i]; // 옮겨 담아주기
        }
        return arr;
    }

     

     

     

     

    • subList(int fromIndex, int toIndex) : fromIndex부터 toIndex 전까지의 요소를 List 형태로 반환
    public List<E> subList(int fromIndex, int toIndex) {
        if (fromIndex < 0 || size < toIndex) {
            throw new IndexOutOfBoundsException(); // fromIndex 예외 처리
        }
        
        if (fromIndex > toIndex) {
            throw new IllegalArgumentException(); // toIndex 예외 처리
        }
    
        List<E> subList = new ArrayList<>();
        for (int i = fromIndex; i < toIndex; i++) {
            subList.add((E) list[i]);
        }
        return subList;
    }

     

     

     

     

    728x90
Posted by Program-mer.