티스토리 뷰

개발냥이/자바(Java)

JAVA List, Array, List.toArray()

데브캣_DevCat 2022. 8. 13. 21:49

What I Learned

[[33. 같은 단어는 싫어]]

위 알고리즘 문제를 풀 때, 리스트를 선언하고 그 리스트를 String 배열로 바꾸려고 할 때 List.toArray 를 사용하면서 배열크기 인자를 좀 복잡하게 작성을 했었다. 애초에 그 인자크기 때문에 애를 먹었던 문제인데 List 에서는 그럴 걱정을 할 필요가 없었다....

우선 toArray를 쓰면서 인자를 [0] 으로 해도 실제 만들어지는 배열 객체의 사이즈가 더 크다면 그 배열 객체의 사이즈를 따라가므로 엄청나게 간편하다.
굳이 배열크기를 구하려고 쌩난리를 치지 않아도 되었던 것이다.


JAVA List 의 toArray() 메서드

List 컨테이너의 인스턴스를 배열(array)로 만드는것이 'toArray' 메서드이다. 하지만 이 메서드 사용에 있어서 아래와같은 아리송한 코드를 자주 봤을 것이다.

List<String> stringList = new ArrayList<String>();
stringList.add("A");
stringList.add("B");
stringList.add("C");

String[] stringArray = **stringList.toArray(new String[0])**;

메서드 이름에서 직관적으로 알 수 있듯이, List를 Array로 바꿔주는 메서드인데, 파라메터로 들어가는 인자가 이상하다.

위의 예제에서는 String 배열 인스턴스가 파라메터로 넘어갔는데, size를 '0'으로 명시했다.
이것이 무슨의미일까? 정리하자면 아래와 같다.

1. List를 toArray 메서드에 파라메터로 넘어가는 배열 객체의 size만큼의 배열로 전환한다.
2. 단, 해당 List size가 인자로 넘어가는 배열 객체의 size보다 클때, 해당 List의 size로 배열이 만들어진다.
3. 반대로 해당 List size가 인자로 넘어가는 배열객체의 size보다 작을때는, 인자로 넘어가는 배열객체의 size로 배열이 만들어진다.

여기서 위의 예제에서의 stringArray의 크기는 '3' 이다. 인자로 넘어가는 배열의 size가 '0'이므로, 원래 List의 size로 배열이 만들어진 것이다.

하지만 아래와 같은 예제라면 stringArray의 크기가 얼마가 될까?

List<String> stringList = new ArrayList<String>();
stringList.add("A");
stringList.add("B");
stringList.add("C");

String[] stringArray = stringList.toArray(new String[5]);

System.out.println("array size : " + stringArray.length);

출력 결과는 아래와 같다

array size : 5

뭐, 당연한 결과다. toArray 메서드의 인자로 넘어가는 배열 size가 원래 List사이즈보다 크므로, 인자로 넘어가는 배열 size로 배열이 만들어진다.

출처


Arrays로 배열 다루기

  • 배열의 비교와 출력 - equals(), toString()
  • toString()
    • java.util.Arrays.toString() 메소드는 파라미터로 배열을 입력받아서,
    • 배열에 정의된 값들을 문자열 형태로 만들어서 리턴해 줍니다.
    • System.out.prinln(arr) > 메모리의 주소값이 리턴됨
      int[] arr = {0, 1, 2, 3, 4};
      int[][] arr2D = {{11, 12}, {21, 22}};
        Arrays.toString(arr); > [0, 1, 2, 3, 4]
        Arrays.deppToString(arr2D); > //  [.[11, 12], [21, 22].]
      Arrays.equals(배열1, 배열2);
  • 배열의 복사 - copyOf(), copuOfRange()
      int[] arr = {0, 1, 2, 3, 4}
      int[] arr2 = Arrays.copyOf(arr, arr.length); // arr2 = [0, 1, 2, 3, 4]
      int[] arr3 = Arrays.copyOf(arr, 3); // arr3 = [0 , 1, 2]
      int[] arr4 = Arrays.copuOfRange(arr, 2, 4); // arr4 = [2, 3]
  • 배열의 정렬 - sort()
      int[] arr = {3, 2, 0, 1, 4};
      Arrays.sort(arr);  > arr = [0, 1, 2, 3, 4]
반응형

'개발냥이 > 자바(Java)' 카테고리의 다른 글

[자바] 다형성의 개념 정리  (0) 2022.08.31
IoC(Inversion of Control), DI(Dependency Injection) & Bean  (0) 2022.08.21
MVC 패턴  (0) 2022.08.21
자바가상머신(JVM)  (0) 2022.08.21
JPA & SQL  (0) 2022.08.13
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함