작성
·
137
0
안녕하세요.
HashSet의 toString 코드를 보다 문의사항이 있어 질문합니다.
@Override
public String toString() {
return "MyHashSetV2{" +
"buckets=" + Arrays.toString(buckets) +
", size=" + size +
", capacity=" + capacity +
'}';
}
다음과 같이 되어 있고 출력을
MyHashSetV2{buckets=[[Member{id='hi'}, Member{id='JPA'}], [], [], [], [], [], [Member{id='spring'}], [], [], [Member{id='java'}]], size=4, capacity=10}
이렇게 하니까 Arrays.toString(buckets) 부분이
[[Member{id='hi'}, Member{id='JPA'}], [], [], [], [], [], [Member{id='spring'}], [], [], [Member{id='java'}]]
이 부분일텐데 따라 들어가면 toString 오버라이딩 된 형태가
toString(Object[] a) {
다음과 같고 실제 스트링으로 만드는 코드는
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(String.valueOf(a[i]));
이거인데요.
여기서 말하는 a[i]는 LinkedList<Object>[] set의 각각의 인덱스에 위치한 LinkedList<Object> 일텐데 LinkedList나 상위의 List를 타고 들어가봐도 따로 toString 메서드를 살펴볼 수 없습니다. String.valueOf(LinkedList)가 어떻게 동작하는건가요 ? 출력물 보면 각 LinkedList안에 객체로 들어간 member의 toString을 출력하는 거 같기는 한데 LinkedList를 순차척으로 도는 코드를 확인 못하겠습니다.
감사합니다.