Community

ArrayList.toArray()

필자의 블로그 [커리어리 글을 작성하는 것이 다소 익숙하지 않기에, 아래 블로그로 가면 가독성이 더욱 좋을 것 입니다.] https://blog.naver.com/PostView.naver?blogId=gomets_journey&logNo=223382474249&categoryNo=28&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postList&userTopListOpen=true&userTopListCount=5&userTopListManageOpen=false&userTopListCurrentPage=1 ArrayList.toArray()의 내부코드 public T[] toArray(T[] a) { 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[] 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()); }

알림

알림이 없습니다