ArrayList.toArray()

필자의 블로그 [커리어리 글을 작성하는 것이 다소 익숙하지 않기에, 아래 블로그로 가면 가독성이 더욱 좋을 것 입니다.]

https://blog.naver.com/PostView.naver?blogId=gomets_journey&logNo=223382474249&categoryNo=28&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postList&userTopListOpen=true&userTopListCount=5&userTopListManageOpen=false&userTopListCurrentPage=1


ArrayList.toArray()의 내부코드

public <T> T[] toArray(T[] a) {
        if (a.length < size)
            // Make a new array of a's runtime type, but my contents:
            return (T[]) Arrays.copyOf(elementData, size, a.getClass());
        System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }

이 코드를 보면 toArray 메서드는 주어진 배열 'a'의 길이가 현재의 켤렉선의 크기보다 작은 경우를 확인한 후 작다면 Arrays.copyOf 메서드를 호출하여 반환하는 것을 알 수 있다.

만약 주어진 배열 'a'의 길이가 컬렉션의 크기와 같거나 더 큰 경우, 'System.arraycopy'를 사용하여 내부 배열인 elementData의 요소를 배열 'a'로 복사한다.

그리고 주어진 배열 'a'의 길이가 컬렉션의 크기보다 더 크다면, 배열의 마지막 요소를 null로 설정한다.

마지막으로 배열 'a'를 반환한다.

그렇다면 copyOf 메서드는 무엇일까? 그전에 Array는 무엇인지에 대해서 알아보도록 하자.

Arrays란?

Arrays 클래스는 Java에서 배열을 다룰 때 편리한 메서드들을 제공하여 개발자들이 배열 조작에 효율적으로 접근할 수 있도록 도와준다.

Arrays.copyOf()의 내부코드

public static <T> T[] copyOf(T[] original, int newLength) {
        return (T[]) copyOf(original, newLength, original.getClass());
    }

위 코드를 보면 copyOf 메서드는 재귀적으로 호출하여 배열을 복사하는 메서드인 것을 알 수 있다.

주어진 배열 original을 newLength로 지정된 길이만큼 새 배열에 복사한다. 그리고 배열의 타입을 보존하기 위해 original.getClass()를 사용함으로써 동일한 유형의 배열을 반환할 수 있는 것이다. 즉, 이 메서드는 원래의 배열과 동일한 유형의 새 배열을 반환한다. 또한 이 메서드는 제네릭으로 정의되어 있으므로 임의의 객체 배열에 대해서도 동작할 수 있는 것이다.

한 가지 흥미로운 점은 getClass()이다. 이 getClass() 메서드는 toString() 메서드에서도 이용된다.

Arrays.toString()의 내부코드

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }


List의 내부구조 탐험(5) - ArrayList.toArray()

blog.naver.com

List의 내부구조 탐험(5) - ArrayList.toArray()

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 3월 13일 오후 4:08

댓글 0

    함께 읽은 게시물

    토요일에 회사에서

    

    ... 더 보기

    서버엔지니어의 시대적 고민

    ... 더 보기

    개발자 교양 팟캐스트

    A

    ... 더 보기

    [DZone] 2024년 클라우드 보안 환경 이해

    ... 더 보기

    Understanding the 2024 Cloud Security Landscape - DZone

    dzone.com

    Understanding the 2024 Cloud Security Landscape - DZone

    Next.js 프로젝트를 AWS EKS에 배포하며 배운 것들

    ... 더 보기

    쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

    product.kyobobook.co.kr

    쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

     • 

    저장 5 • 조회 1,007


    < 뛰어난 리더는 '시간'을 가장 까다롭게 쓴다 >

    1. 관리자 업무 중 상당한 부분을 차지하는 일은 인력, 돈, 자본 등의 자원을 할당하는 것이다.

    ... 더 보기