List의 내부구조 탐험(5) - ArrayList.toArray()
blog.naver.com
필자의 블로그 [커리어리 글을 작성하는 것이 다소 익숙하지 않기에, 아래 블로그로 가면 가독성이 더욱 좋을 것 입니다.]
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());
}
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 3월 13일 오후 4:08
기
... 더 보기최
... 더 보기1. 관리자 업무 중 상당한 부분을 차지하는 일은 인력, 돈, 자본 등의 자원을 할당하는 것이다.