본문 바로가기
언어/Java

배열과 맵 toString()

by 넬준 2022. 5. 25.

 

자바에서 여러 자료형을 JSON형태로 만드는 과제가 있었다.

 

그 중 배열과 Map 자료형에서 JSON형태로 만들 때, StringBuilder에 "["(배열), "{"(Map) 를 붙이고서, 각 요소들을 붙여주는 식으로 구현했다. 그러다보니 마지막 요소 뒤에도 붙는 ","를 처리해주는 과정이 한 번 더 들어갔다.

 

근데 배열과 map 클래스에서 overriding된 toString()을 이용하는 풀이를 보고 몰랐던 부분을 정리하고자 한다.

 

Arrays.toString(배열)

 

int[] arr = {1, 2, 3, 4, 5};

String result = Arrays.toString(arr); // result : "[1, 2, 3, 4, 5]"

//arr.toString(); (x) -> Object클래스의 toString()이 그대로 호출!

 

Arrays클래스에서 toString()을 실제로 overriding한 코드를 보면 다음과 같다.

 

//in Arrays class
public static String toString(int[] a) {
    if (a == null)
        return "null";
    int iMax = a.length - 1;
    if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(a[i]);
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}

 

 

map.toString()

 

Map<String, String> map = new HashMap<>();
map.put("이름", "홍길동");
map.put("나이", "23");
map.put("학교", "자바중학교");

String result = map.toString(); // result : "{이름=홍길동, 나이=23, 학교=자바중학교}"

 

Map 인터페이스를 구현한 AbstractMap 추상클래스에 toString()이 overiding 되어 있다.

이 AbstractMap 추상클래스는 HashMap이나 TreeMap 클래스의 상위 클래스이다.

 

//in AbstractMap class
public String toString() {
    Iterator<Entry<K,V>> i = entrySet().iterator();
    if (! i.hasNext())
        return "{}";

    StringBuilder sb = new StringBuilder();
    sb.append('{');
    for (;;) {
        Entry<K,V> e = i.next();
        K key = e.getKey();
        V value = e.getValue();
        sb.append(key   == this ? "(this Map)" : key);
        sb.append('=');
        sb.append(value == this ? "(this Map)" : value);
        if (! i.hasNext())
            return sb.append('}').toString();
        sb.append(',').append(' ');
    }
}

 

 

'언어 > Java' 카테고리의 다른 글

예외 (Exception)  (0) 2022.06.28
Arrays.asList()  (0) 2022.05.30
OOP의 특성 - 2. 다형성  (0) 2022.05.13
OOP의 특성 - 1. 상속  (0) 2022.05.12
생성자  (1) 2022.05.11

댓글