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); }</string></string>
실행 결과: "1" 요소가 성공적으로 추가되었습니다.
[null, null, 1]
사용 시나리오: 배열을 List로 변환한 후 List를 추가, 삭제, 수정, 쿼리해야 합니다. 이는 List의 데이터 양이 크지 않을 때 사용할 수 있습니다.
3.컬렉션 도구 클래스의 Collections.addAll() 메소드를 통해(가장 효율적)
Collections.addAll(arrayList, strArray) 메소드를 통해 변환하여 길이에 따라 동일한 길이의 List를 생성합니다. 그런 다음 Collections.addAll() 메서드를 사용하여 배열의 요소를 바이너리로 변환한 다음 목록에 추가하는 것이 가장 효율적인 방법입니다.
키 코드:
ArrayList arrayList = new ArrayList<string>(strArray.length); Collections.addAll(arrayList, strArray);</string>
테스트:
private void testArrayCastToListEfficient(){ String[] strArray = new String[2]; ArrayList arrayList = new ArrayList<string>(strArray.length); Collections.addAll(arrayList, strArray); arrayList.add("1"); System.out.println(arrayList); }</string>
실행 결과: "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; }</t>
질문 및 답변 질문: 배열 유형이 정수 배열인 경우 List로 변환할 때 오류가 보고됩니까?
답변: JDK1.8 환경에서 테스트한 결과 세 가지 변환 방식 모두 문제가 없습니다. 사용하기에 안전합니다. Integer[] 정수 배열을 List로 변환하는 방법과 테스트 결과는 다음과 같습니다.
방법 1: 추가 및 삭제를 지원하지 않습니다.
Integer[] intArray1 = new Integer[2]; List<integer> list1 = Arrays.asList(intArray1); System.out.println(list1);</integer>
실행 결과:
[null, null]
방법 2: 추가 및 삭제를 지원합니다
Integer[] intArray2 = new Integer[2]; List<integer> list2 = new ArrayList<integer>(Arrays.asList(intArray2)) ; list2.add(2); System.out.println(list2);</integer></integer>
실행 결과:
[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);</integer></integer>
실행 결과:
[null, null, 3]
요약하면 정수 Integer[] 배열을 List로
실수하기 쉬운 점: 가능한 오류는 다음과 같습니다. 변환:
int[] intArray1 = new int[2]; List<integer> list1 = Arrays.asList(intArray1);//此处报错!!!</integer>
오류 원인: 등호 양쪽의 유형이 일치하지 않아 당연히 컴파일이 실패합니다. 분석은 아래를 참조하세요.
그러면 배열을 선언할 때 int[] 또는 Integer[]를 사용해야 하는데 어떤 선언 방법을 사용하면 List로 올바르게 변환할 수 있나요?
답변: Integer[]만 사용하여 List를 변환할 수 있습니다
이유는 다음과 같이 분석됩니다. 다음은 다음과 같습니다.
Java 소스 코드에서 List의 정의를 살펴보겠습니다(소스 코드를 이해할 수 없다고 걱정하지 마세요. 내 분석을 보면 이해하기 매우 쉽습니다).
public interface List<e> extends Collection<e> {省略…}</e></e>
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);//编译报错</integer>
답변:
코드의 두 번째 줄인 Arrays.asList() 메소드의 입력 매개변수는 참조 유형 int[]이며, 그러면 반환 값 유형은 List
이어야 합니다. 세 번째 줄 등호 양쪽의 유형이 일치하지 않기 때문에 오류가 보고됩니다. 왼쪽: List
위 내용은 Java에서 배열을 목록으로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구
