[자바 밟 기] - Array List 의 toString ()

질문 설명:
        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 list=new ArrayList();
        list.add("  ");
        list.add("  ");
        list.add("  ");
        list.add(list);
        System.out.println(list.toString());

만약 우리 가 코드 를 이렇게 바꾼다 면,  위의 판단 문 이 없 었 다 면 어 땠 을 까?
그러면 저희 가 이 위 에 있 는 코드 를 적 었 다 면...  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(' ');
            }
        }
    }

위의 종 류 를 한 걸음 에 사용 해 보 세 요!!

좋은 웹페이지 즐겨찾기