[자바 밟 기] - Array List 의 toString ()
2780 단어 [Java 구덩이 밟 기]
List list=new ArrayList();
list.add(" ");
list.add(" ");
list.add(" ");
System.out.println(list.toString());
결과 출력:
[장삼, 이사, 왕 오]
결과 에서 우 리 는 두 번 째 데이터 부터 모든 데이터 의 앞 에 빈 칸 문자 가 하나 더 있다 는 것 을 알 게 될 것 이다.
질문 찾기:
우선 Array List 의 정 의 를 살 펴 보 겠 습 니 다.
public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable
우리 Array List 에서 우 리 는 toString 의 구체 적 인 실현 을 보지 못 했다.이 toString 방법 은 AbstractList 류 에서 물 려 받 은 것 으로 추정 된다.AbstractList 에 도 toString 방법 은 없다.
AbstractList 의 정 의 를 계속 위로 보 세 요:
public abstract class AbstractList extends AbstractCollection implements List
우 리 는 AbstractCollection 류 에서 toString 방법 을 발견 했다.AbstractCollection 의 toString 의 실현 을 살 펴 보 자.
public String toString() {
Iterator it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}
코드 에서 우 리 는 toString 방법 중 하나의 'append (') 가 빈 칸 문 자 를 연결 하 는 것 을 볼 수 있 습 니 다.그래서 우 리 는 list. toString () 방법 을 사용 할 때 빈 칸 이 생 겼 다.
보충:
sb. append (e = = this? "(this Collection)": e)
List
만약 우리 가 코드 를 이렇게 바꾼다 면, 위의 판단 문 이 없 었 다 면 어 땠 을 까?
그러면 저희 가 이 위 에 있 는 코드 를 적 었 다 면... StackOverflow Error 오류 가 발생 합 니 다. sb. append (e) 를 직접 호출 합 니 다. list 로 순환 할 때 이 toString () 방법 을 사용 하여 무한 순환 을 가 져 옵 니 다.
우 리 는 우리 의 추측 을 검증 할 수 있다.
public class MyArrayList extends ArrayList
{
@Override
public String toString()
{
Iterator it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}
}
위의 종 류 를 한 걸음 에 사용 해 보 세 요!!