>  기사  >  Java  >  Java에서 배열을 목록으로 변환하는 방법

Java에서 배열을 목록으로 변환하는 방법

WBOY
WBOY앞으로
2023-04-19 09:13:042904검색

1. 가장 일반적인 방법(반드시 가장 좋은 방법은 아님)

Arrays.asList(strArray) 메서드를 사용하면 배열을 List로 변환한 후 List를 추가하거나 삭제할 수 없으며 확인 및 수정만 가능합니다. 그렇지 않으면 예외가 발생합니다.

키 코드: 목록 목록 = Arrays.asList(strArray);

private void testArrayCastToListError() {   String[] strArray = new String[2];   List list = Arrays.asList(strArray);   //对转换后的list插入一条数据   list.add("1");   System.out.println(list);  }

실행 결과:

Exception in thread "main" java.lang.UnsupportedOperationException  at java.util.AbstractList.add(AbstractList.java:148)  at java.util.AbstractList.add(AbstractList.java:108)  at com.darwin.junit.Calculator.testArrayCastToList(Calculator.java:19)  at com.darwin.junit.Calculator.main(Calculator.java:44)

프로그램이 list.add("1")에서 예외를 발생시킵니다: UnsupportedOperationException.

원인 분석:

Arrays.asList(strArray) 반환 값은 java.util.ArrayList 클래스가 아닌 java.util.Arrays 클래스의 전용 정적 내부 클래스 java.util.Arrays.ArrayList입니다. java.util.Arrays.ArrayList 클래스에는 set(), get(), contain() 및 기타 메소드가 있지만 add() 또는 Remove() 메소드가 없으므로 add() 메소드를 호출하면 오류가 보고됩니다. .

사용 시나리오: Arrays.asList(strArray) 메서드는 배열을 List로 변환한 후에만 사용할 수 있습니다. 그 안에 값을 추가하거나 삭제할 필요가 없으며 읽기 위한 데이터 소스로만 사용할 수 있습니다.

2. 배열을 List로 변환한 후 추가, 삭제, 수정, 확인하는 방법을 지원합니다

Arrays.asList(strArray)의 반환 값을 java.util.Arrays.ArrayList로 변환합니다. ArrayList의 생성자를 통해 util을 사용합니다.

키 코드: ArrayList

private void testArrayCastToListRight() {   String[] strArray = new String[2];   ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;   list.add("1");   System.out.println(list);  }

실행 결과: "1" 요소가 성공적으로 추가되었습니다.

[null, null, 1]

사용 시나리오: 배열을 List로 변환한 후 List를 추가, 삭제, 수정, 쿼리해야 합니다. 이는 List의 데이터 양이 크지 않을 때 사용할 수 있습니다.

3.컬렉션 도구 클래스의 Collections.addAll() 메소드를 통해(가장 효율적)

Collections.addAll(arrayList, strArray) 메소드를 통해 변환하여 길이에 따라 동일한 길이의 List를 생성합니다. 그런 다음 Collections.addAll() 메서드를 사용하여 배열의 요소를 바이너리로 변환한 다음 목록에 추가하는 것이 가장 효율적인 방법입니다.

키 코드:

ArrayList< String> arrayList = new ArrayList<String>(strArray.length); Collections.addAll(arrayList, strArray);

테스트:

private void testArrayCastToListEfficient(){   String[] strArray = new String[2];   ArrayList< String> arrayList = new ArrayList<String>(strArray.length);   Collections.addAll(arrayList, strArray);   arrayList.add("1");   System.out.println(arrayList);  }

실행 결과: "1" 요소도 성공적으로 추가되었습니다.

[null, null, 1]

사용 시나리오: 배열을 List로 변환한 후 List를 추가, 삭제, 수정, 쿼리해야 합니다. List의 데이터 양이 많을 경우 먼저 사용하면 작업 속도가 향상될 수 있습니다.

참고: 첨부된 것은 Collections.addAll() 메소드의 소스 코드입니다:

public static <T> boolean addAll(Collection<? super T> c, T... elements) {         boolean result = false;         for (T element : elements)             result |= c.add(element);//result和c.add(element)按位或运算,然后赋值给result         return result;     }

질문 및 답변 질문: 배열 유형이 정수 배열인 경우 List로 변환할 때 오류가 보고됩니까?

답변: JDK1.8 환경에서 테스트한 결과 세 가지 변환 방식 모두 문제가 없습니다. 사용하기에 안전합니다. Integer[] 정수 배열을 List로 변환하는 방법과 테스트 결과는 다음과 같습니다.

방법 1: 추가 및 삭제를 지원하지 않습니다.

Integer[] intArray1 = new Integer[2]; List<Integer> list1 = Arrays.asList(intArray1); System.out.println(list1);

실행 결과:

[null, null]

방법 2: 추가 및 삭제를 지원합니다

Integer[] intArray2 = new Integer[2]; List<Integer> list2 = new ArrayList<Integer>(Arrays.asList(intArray2)) ; list2.add(2); System.out.println(list2);

실행 결과:

[null, null, 2]

방법 3: 추가 및 삭제를 지원하며 대용량 데이터에 가장 효율적입니다.

Integer[] intArray3 = new Integer[2]; List<Integer> list3 = new ArrayList<Integer>(intArray3.length); Collections.addAll(list3, intArray3); list3.add(3); System.out.println(list3);

실행 결과:

[null, null, 3]

요약하면 정수 Integer[] 배열을 List로

실수하기 쉬운 점: 가능한 오류는 다음과 같습니다. 변환:

int[] intArray1 = new int[2]; List<Integer> list1 = Arrays.asList(intArray1);//此处报错!!!

오류 원인: 등호 양쪽의 유형이 일치하지 않아 당연히 컴파일이 실패합니다. 분석은 아래를 참조하세요.

그러면 배열을 선언할 때 int[] 또는 Integer[]를 사용해야 하는데 어떤 선언 방법을 사용하면 List로 올바르게 변환할 수 있나요?

답변: Integer[]만 사용하여 List를 변환할 수 있습니다

이유는 다음과 같이 분석됩니다. 다음은 다음과 같습니다.

Java 소스 코드에서 List의 정의를 살펴보겠습니다(소스 코드를 이해할 수 없다고 걱정하지 마세요. 내 분석을 보면 이해하기 매우 쉽습니다).

public interface List<E> extends Collection<E> {省略&hellip;}

Java 소스 코드에서 Arrays.asList() 정의를 살펴보세요.

public static List asList(T... a) {     return new ArrayList<>(a); }
  • 위 소스 코드에서 볼 수 있듯이 List를 선언할 때 일반 유형을 전달해야 합니다.

  • 무엇입니까? 참조 유형은 무엇입니까? Integer는 참조 유형이므로 int는 참조 유형이 아닌 기본 데이터 유형입니다. 이것이 Java에 List가 없는 이유입니다.

  • 한 가지 예를 다른 경우에 적용해 보세요. 다른 8가지 기본 데이터 유형인 byte, short, int, long, float, double 및 char은 참조 유형이 아니므로 8가지 기본 데이터는 종류는 목록인삼의 형태로 사용될 수 없습니다. 하지만 문자열, 배열, 클래스, 인터페이스는 참조형이고 리스트의 형식적인 매개변수로 사용될 수 있으므로 리스트가 존재한다

위의 기본 지식을 바탕으로 다음 두 줄의 코드 중 두 번째 줄이 왜 그럴 수 있는지 살펴보자.

int[] intArray1 = new int[1];  Arrays.asList(intArray1);//编译不报错 List<Integer> list1 = Arrays.asList( intArray1);//编译报错

답변:

  • 코드의 두 번째 줄인 Arrays.asList() 메소드의 입력 매개변수는 참조 유형 int[]이며, 그러면 반환 값 유형은 List

  • 이어야 합니다. 세 번째 줄 등호 양쪽의 유형이 일치하지 않기 때문에 오류가 보고됩니다. 왼쪽: List

위 내용은 Java에서 배열을 목록으로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제