Java 배열 코드 예제 요약
추상:
이 글은 주로 Java의 배열에 대한 지식을 설명하고 있으며, 주로 배열은 배열과 컨테이너, 배열 생성과 초기화, 배열과 제네릭, 배열과 변수 매개변수목록, 배열 도구 클래스의 실제 기능 등 다섯 가지 측면에서 자세히 논의됩니다. 설명 및 요약.
1. 핵심사항개요
어레이 및 컨테이너
생성 및 생성 배열 초기화
배열 및 일반
배열 및 변수 매개변수 목록
배열 도구 클래스 실용적인 기능 요약
2. 배열과 컨테이너
Java에서는 배열과 컨테이너를 모두 객체 를 담을 수 있는데 배열과 컨테이너의 차이점은 무엇일까요? 객체를 보관해야 할 때 어떤 상황에서 배열에 우선순위를 두어야 하며, 어떤 상황에서 컨테이너에 우선순위를 두어야 할까요?
Java 초기 버전에서는 고정 크기 배열이 절대적으로 필요했는데, 이는 Java 디자이너가 Java에 기본 유형을 포함하고 일부 성능 기반 고려 사항을 고려했을 뿐만 아니라 초기 버전 때문이기도 했습니다. 컨테이너에 대한 지원이 거의 없습니다. 따라서 초기 버전의 Java에서는 특히 다음 세 가지 측면에서 배열을 포함하도록 선택하는 것이 항상 합리적입니다.
-
효율성
Java에서는 배열은 객체참조의 시퀀스를 저장하고 무작위로 액세스하는 가장 효율적인 방법입니다. 배열은 요소 액세스를 매우 빠르게 만드는 간단한 선형 시퀀스입니다. 그러나 이 속도에 대한 대가는 배열 객체의 크기가 고정되어 있고 수명 동안 변경할 수 없다는 것입니다. ArrayList는 자동 공간 할당을 실현할 수 있고 더 유연하기 때문에 일반적으로 배열보다 ArrayList를 선호해야 하지만 이러한 유연성에는 오버헤드가 발생합니다. 따라서 ArrayList는 배열보다 훨씬 덜 효율적입니다.
-
Type
JDK 1.5 이전에는 Java에 제네릭이 도입되지 않았습니다. 따라서 개체를 처리할 때 제네릭 이전의 컨테이너 클래스는 해당 개체를 특정 유형이 없는 것으로 처리합니다. 즉, 이러한 개체는 Object로 처리됩니다. 제네릭보다 배열이 컨테이너보다 나은 이유는 특정 유형을 보유하는 배열을 만들 수 있기 때문입니다. 즉, 컴파일 타임 유형 검사를 통해 잘못된 유형이 삽입되거나 부적절한 유형이 추출되는 것을 방지할 수 있습니다. 물론 Java는 컴파일 타임과 런타임 모두에서 객체에 부적절한 메시지를 보내는 것을 방지합니다. 따라서 어떤 방법이 덜 안전한 것이 아니라, 컴파일 중에 오류를 지적할 수 있다면 더 우아할 것입니다.
-
기본 유형을 저장하는 기능
배열은 기본 유형을 담을 수 있지만 제네릭 이전의 컨테이너는 담을 수 없습니다.
JDK 1.5 이후 Java에서는 제네릭 및 자동 패키징 메커니즘을 도입했습니다(제네릭은 유형이 안전한 컨테이너의 생성을 보장할 수 있고 자동 패키징 메커니즘은 컨테이너가 기본 유형을 보유할 수 있도록 허용함). 이는 성능을 제외한 모든 측면에서 오늘날의 컨테이너를 왜소한 배열로 만듭니다. 또한 제네릭은 배열에 큰 위협이 되며 일반적으로 둘을 잘 결합할 수 없습니다. (매개변수화된 유형의 배열은 인스턴스화할 수 없습니다) .
따라서 최신 Java 버전 을 사용하여 을 프로그래밍할 때 은 배열보다 컨테이너를 선호해야 합니다. 성능이 문제이고 어레이로 전환하면 성능에 도움이 된다는 것이 입증된 경우에만 어레이를 사용하도록 프로그램을 리팩터링해야 합니다.
3. 배열 생성 및 초기화
1. 배열 기본
배열 식별자는 reference 힙에 생성된 실제 객체를 가리키는 이 객체는 다른 객체에 대한 참조 또는 기본 유형의 값을 저장하는 데 사용됩니다. 배열을 직접 저장합니다.
"[ ]" 구문은 배열 객체에 액세스하는 유일한 방법입니다. > 2. 생성 및 초기화
는 배열 초기화의 일부로 암시적으로 생성됩니다
String[] strs = { ... }; // 创建方式 1 --- 花括号内对象的个数就是数组大小System.out.println(strs.length); // 输出 0
String[] strs = new String[5]; //创建方式 2String[] ss = new String[]{ ... }; //创建方式 3
3을 사용하여 명시적으로 생성 . 다차원 배열
다차원 배열의 본질: 배열의 요소는 여전히 배열입니다
// 创建方式 1int[][] a = { { 1, 2, 3, }, { 4, 5, 6, }, }; // 创建方式 2int[][][] a = new int[2][2][4];//粗糙数组:每个向量具有任意长度Random rand = new Random(47); // 3-D array with varied-length vectors: int[][][] a = new int[rand.nextInt(7)][][]; for(int i = 0; i < a.length; i++) { a[i] = new int[rand.nextInt(5)][]; for(int j = 0; j < a[i].length; j++) a[i][j] = new int[rand.nextInt(5)]; }
4. 배열과 제네릭
배열과 제네릭은 잘 결합할 수 없습니다. 즉, 매개변수화된 유형의 배열은 인스턴스화할 수 없습니다.
T[] first = new T[3]; // ERROR A<String>[] arrays = new A<String>[4]; // ERROR: Cannot create a generic array of A<String>
는 일반 배열 참조를 생성할 수 있습니다.
A<String>[] arrays; // OK
배열은 공변적입니다.
Object[] objs = new String[3]; // OK
즉, 일반 컨테이너는 항상 일반 배열보다 더 나은 선택입니다.
5. 배열과 가변 매개변수 유형
1. 가변 매개변수 유형의 개념
Java SE5에는 가변 매개변수 유형(변수 인수 유형), "Type...args" 형식에서 는 메서드 매개 변수 로만 사용할 수 있습니다. 가변 매개변수 목록은 매개변수의 개수는 불확실하지만 유형은 확실한 상황(java는 가변 매개변수를 배열로 처리함)에 적합합니다. 변수 매개변수 목록은 마지막 항목이어야 한다는 점에 특히 주의해야 합니다(즉, 최대 하나의 가변 매개변수만 지원됩니다). 변수 매개변수 목록이 2개 이상인 경우, 변수 중 하나가 마지막 항목이 아니어야 하므로, 하나의 변수 매개변수만 지원됩니다. 변수 매개변수 목록에 있는 매개변수의 개수가 불확실하기 때문에 뒤에 같은 유형의 매개변수가 있는 경우 자바는 전달된 매개변수가 이전 변수 매개변수에 속하는지 다음 매개변수에 속하는지 구분하지 못하기 때문에 가변 매개변수만 배치할 수 있다. 마지막에 한 항목.
// 代码示例public class TestVarArgus { public static void dealArray(int... intArray){ for (int i : intArray) System.out.print(i +" "); System.out.println(); } public static void main(String args[]){ dealArray(); dealArray(1); dealArray(1, 2, 3); } }/* Output: 1 1 2 3 *///:~
변수 매개변수 목록에는 다음과 같은 특징이 있습니다.
은 메소드 매개변수 목록 끝에만 나타날 수 있습니다. 🎜>
… >변수 이름, 앞뒤에 공백이 있거나 없음; 변수 매개변수를 사용하여 메소드를 호출하면 컴파일러는 변수 매개변수는 암시적으로 배열을 생성하므로 메서드 본문의 변수 매개변수 목록 에 배열로 액세스할 수 있습니다(컴파일러는 변수 매개변수를 배열로 처리합니다)
. 2. 가변 매개변수 유형과 배열의 호환성
오버로드
public class TestVarArgus { public static void dealArray(int... intArray){ for (int i : intArray) System.out.print(i +" "); System.out.println(); } //ERROR : Duplicate method dealArray(int[]) in type TestVarArgus public static void dealArray(int[] intArray){ for (int i : intArray) System.out.print(i +" "); System.out.println(); } public static void main(String args[]){ dealArray(); dealArray(1); dealArray(1, 2, 3); } }
로그인 후 복사할 수 없습니다. 변수 매개변수는 배열 유형 매개변수와 호환되지만, 배열 유형 매개변수는 가변 매개변수와 호환되지 않습니다.
// 代码示例 1 : 给参数为可变参数类型的方法传递数组public class TestVarArgus { public static void dealArray(int... intArray){ for (int i : intArray) System.out.print(i +" "); System.out.println(); } public static void main(String args[]){ int[] intArray = {1, 2, 3}; dealArray(intArray); // OK } }
- 실제로 샘플코드 2의 경우 dealArray(int, int, int)로 정의된 메소드나 dealArray(int...)로 정의된 메소드만 있으면 됩니다. 따라서 dealArray(int[]) 메소드와 배열 유형의 매개변수를 일치시키는 것은 당연히 불가능합니다.
이 <🎜에 우선 순위를 둡니다. > 일치하는 이 방법은;
우리에게 친숙한 메인 함수가변 매개변수 유형의 형태로 다시 작성할 수도 있습니다: public static void main(String... args) .
// 代码示例 2 : 给参数为数组类型的方法传递可变参数public class TestVarArgus { public static void dealArray(int[] intArray){ for (int i : intArray) System.out.print(i +" "); System.out.println(); } public static void main(String args[]){ dealArray(1, 2, 3); // ERROR } }
6. 배열 도구 클래스의 실제 기능1. 배열 복사
Function Introduction Note System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束 若复制对象数组,那么只是复制了对象的引用,而不是对象本身的拷贝(浅复制);该方法不会执行自动包装和自动拆包,所以两个数组必须具有相同的确切类型;须明确自行新建立一个数组对象,作为副本 copyOf(T[] original, int newLength) 复制指定的数组,截取或用 null 填充 底层调用的还是 System.arraycopy;返回一个新的数组对象,若新数组的长度超过原数组的长度,则保留数组默认值
注意:对于以上两个方法:
若复制对象数组,那么只是复制了对象的引用,而不是对象本身的拷贝;
这两个方法不会执行自动包装和自动拆包,所以两个数组必须具有相同的确切类型。
2、数组的字符串方式表示
方法: Arrays.toString(Object[] a) / Arrays.deepToString(Object[] a)
作用: 返回指定数组内容的字符串表示形式:前者适用于一维数组,或者适用于多维数组
3、数组的比较
方法: Arrays.equals(Object[] a, Object[] a2) / deepEquals(Object[] a1, Object[] a2) (多维)
作用: 比较两个数组:元素类型相同,元素个数相等,对应位置的元素相同;
注意:
通过对每个元素使用 equals() 作比较来判断;
对于基本类型,使用的是基本类型的包装器类的 equals() 方法(对于 int 类型使用 Integer.equals() 作比较);
使用 equals() 方法比较原则:是不是同一个对象,是不是同一个类型,是不是具有相同的内容。
int[] a1 = new int[10]; int[] a2 = new int[10]; Arrays.fill(a1, 47); Arrays.fill(a2, 47); print(Arrays.equals(a1, a2)); //true
로그인 후 복사4、数组的排序
使用内置的排序方法,就可以对任意的基本类型数组排序;也可以对任意的对象数组进行排序,只要该对象实现了 Comparable 接口或具有相关联的 Comparator (独立的实现该接口的类)。
方法: Arrays.sort(Object[] a) / Arrays.sort(Object[] a, int fromIndex, int toIndex)
Arrays.sort(T[] a, Comparator super T> c) / Arrays.sort(T[] a, int fromIndex, int toIndex, Comparator super T> c)作用: 对数组内元素进行升序排序 (默认)
String[] sa = Generated.array(new String[20], new RandomGenerator.String(5)); // 利用 String 内置的比较器(已实现 Comparable 接口):字典序(大写字母开头的词都放在前面输出,之后才是小写字母开头的词)Arrays.sort(sa); // ... ,WHkjU, YNzbr, bkIna, cQrGs, .... // 利用 Comparator 比较 : Collections.reverseOrder() : 现有顺序的逆序Arrays.sort(sa, Collections.reverseOrder()); // 利用 Comparator 比较 : String.CASE_INSENSITIVE_ORDER : 忽略大小写将单词一起进行排序Arrays.sort(sa, String.CASE_INSENSITIVE_ORDER);
로그인 후 복사Java 标准类库中的排序算法针对正排序的特殊类型进行了优化 ———— 针对基本类型设计的“快排” 和 针对对象设计的“稳定归并排序”。所以,无需担心排序的性能,除非你可以证明排序部分的确是程序效率的瓶颈。
5、在已排序的数组中查找
若数组已经 排好序,就可以使用该方法执行快速查找;若对未排序的数组使用该方法,将产生不可预料的结果。
方法: binarySearch(Object[] a, Object key) / binarySearch(T[] a, T key, Comparator super T> c)
作用: 使用 二分搜索法 来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据元素的自然顺序对数组进行升序排序(通过 sort(Object[]) 方法); 使用二分搜索法来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据指定的比较器(通过 sort(T[], Comparator) 方法)对数组进行多态升序排序。
注意:
对 已经有序 的数组进行查找;
"sort(Object[])"는 "binarySearch(Object[] a, Object key)", "sort(T[], Comparator)"에 해당합니다. BinarySearch(T[] a, T key, Comparator
c)에 해당합니다. -
배열에 중복 요소가 포함된 경우 이 방법은 어떤 요소가 발견되는지 보장할 수 없습니다. 중복 요소 없이 배열을 정렬해야 하는 경우 Tree Set을 사용할 수 있습니다. 정렬을 위해
(정렬 순서 유지) 또는 Linked해시Set(삽입 순서 유지)를 선택하세요. 프로그램에서 병목 현상이 발생하지 않는 한 배열을 직접 유지 관리할 필요는 없습니다. 6. 배열 채우기
fill(Object[] a, Object val) 기능 :은 각 위치를 동일한 값으로만 채울 수 있으며, 객체의 경우 동일한 객체의 참조를 복사하여 채우는 것입니다
메서드:
7. 배열과 컨테이너 간 변환
asList(T… a) 함수:을 반환합니다. 지정된 배열에서 지원되는 고정 크기 목록
기본 표현은 배열이므로 크기를 조정할 수 없습니다.
참고:
결과 목록은 때문에 고정 크기입니다.- 따라서 추가/제거 메소드를 호출하면 java.
lang.UnsupportedOperationException이 발생합니다(선택적 작업). 따라서
Arrays.asList()는 실제로 결과를 생성자 인수로 컬렉션에 전달하거나 add All 메소드, Collections.addAll - 정적
배열 대신 컨테이너 사용을 선호합니다.
만들 때 배열과 변수 매개변수를 사용하세요. 메소드 매개변수, 가변 매개변수 사용의 우선순위를 지정하면 프로그램이 더 분리될 수 있습니다. 프로그래밍에 드는 노력을 절반으로 줄여 두 배의 결과를 얻으세요.
위 내용은 Java 배열 코드 예제 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4
