>Java >java지도 시간 >Java Arrays.asList() 메서드의 제한 사항은 무엇이며 기본 배열을 목록으로 변환할 때 이를 어떻게 극복할 수 있습니까?

Java Arrays.asList() 메서드의 제한 사항은 무엇이며 기본 배열을 목록으로 변환할 때 이를 어떻게 극복할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-20 16:52:18732검색

What are the limitations of Java's Arrays.asList() method, and how can I overcome them when converting primitive arrays to lists?

Arrays.asList() 동작 및 제한 사항 이해

배열과 컬렉션으로 작업할 때 배열을 다음으로 변환하려는 경우가 많습니다. 더 쉽게 조작할 수 있는 목록입니다. Java의 Arrays.asList() 메소드는 이러한 목적으로 자주 사용됩니다. 그러나 이 메서드가 예상대로 작동하지 않을 수 있는 특정 시나리오가 있습니다.

Arrays.asList()가 다른 목록을 반환하는 이유

다음 코드를 고려하세요.

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); // Works
int[] ints = {1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(ints); // Returns List<int[]>

첫 번째 예에서 Arrays.asList()는 List 지정된 정수 요소를 포함합니다. 그러나 두 번째 예에서는 List를 반환합니다. 이러한 차이는 다음과 같은 이유로 발생합니다.

  • Arrays.asList()는 개별 요소의 배열 또는 목록을 전달하는 데 사용할 수 있는 varargs 매개변수를 허용합니다.
  • 첫 번째 예에서는 메소드가 Integer 객체로 해석하는 개별 정수 요소를 전달합니다.
  • 두 번째 예에서는 int[]를 전달합니다. 단일 객체로 취급됩니다.

오토박싱 제한

Java의 오토박싱 기능은 기본 유형을 해당 래퍼 유형(예: int에서 Integer로)으로 자동 변환합니다. 그러나 이 변환은 기본 요소 배열이 아닌 개별 요소에 대해서만 발생합니다. 따라서 int[]를 Arrays.asList()에 전달하면 오토박싱이 발생하지 않고 메서드는 List를 반환합니다.

Solutions

이 동작을 수정하고 List int[]에는 세 가지 옵션이 있습니다.

  • 도우미 라이브러리 사용: Guava와 같은 라이브러리는 다양한 유형의 배열을 목록으로 변환하는 방법을 제공합니다. 예를 들어, com.google.common.primitive.Ints.asList()를 사용하여 List int[]에서.
  • 새 배열 만들기: int[]의 요소가 포함된 새 Integer[]를 만든 다음 해당 배열을 Arrays.asList()에 전달할 수 있습니다. .
  • 반복 및 상자화: int[]를 통해 수동으로 반복하여 각 요소를 상자화하고 List에 추가합니다.

위 내용은 Java Arrays.asList() 메서드의 제한 사항은 무엇이며 기본 배열을 목록으로 변환할 때 이를 어떻게 극복할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.