모든 배열 요소를 0으로 초기화하는 단축키가 있습니까?
에서 C/C++
내가 할하는 데 사용
int arr[10] = {0};
모든 배열 요소를 0으로 초기화합니다
. Java에도 비슷한 단축키가 있습니까?
루프 사용을 피하고 싶습니다. 가능합니까?
int arr[] = new int[10];
for(int i=0;i<arr.length;i++)
arr[i] = 0;
정수 유형의 배열에 대한 기본값 0은 언어 사양에 의해 보장됩니다 .
각 클래스 변수, 인스턴스 변수 또는 배열 구성 요소는 작성 될 때 기본값으로 초기화됩니다 (§15.9, §15.10) [...] type
int
의 기본값은 00
입니다.
배열을 다른 값으로 초기화하려면 java.util.Arrays.fill ()을 사용할 수 있습니다 ( 물론 내부적으로 루프를 사용함).
다른 답변은 정확하지만 (int 배열 값은 기본적으로 0으로 초기화됩니다) 명시 적으로 수행하려는 경우 (예 : 값 42로 채워진 배열을 원할 경우) fill () 메서드를 사용할 수 있습니다 배열의 클래스 :
int [] myarray = new int[num_elts];
Arrays.fill(myarray, 42);
또는 1 라이너 팬이라면 다음과 같은 Collections.nCopies()
루틴을 사용할 수 있습니다 .
Integer[] arr = Collections.nCopies(3, 42).toArray(new Integer[0]);
arr에게 가치를 줄 것입니다 :
[42, 42, 42]
(이것은 Integer
아니지만 int
, 기본 유형이 필요한 경우 Apache CommonsArrayUtils.toPrimitive()
루틴을 연기 할 수 있습니다 .
int [] primarr = ArrayUtils.toPrimitive(arr);
Java에서는 모든 요소가 기본적으로 0으로 초기화됩니다. 루프를 저장할 수 있습니다.
어떻게 응용 프로그램의 성능을 저하 시키는가? ...? 다음을 읽으십시오.
Java 언어 사양에서는 모든 객체 의 기본값 / 초기 값 을 다음과 같이 지정할 수 있습니다.
byte 유형의 경우 기본값 은 0 이며, 즉 (byte)의 값은 0 입니다.
short 유형의 경우 기본값 은 0 이며, 즉 (short) 값은 0 입니다.
int 유형의 경우 기본값 은 0 , 즉 0 입니다.
long 유형의 경우 기본값 은 0 , 즉 0L 입니다.
float 유형의 경우 기본값 은 양수 0 , 즉 0.0f 입니다.
double 유형의 경우 기본값 은 양수 0 , 즉 0.0d 입니다.
char 유형의 경우 기본값 은 널 문자, 즉 ' \ u0000 '입니다.
boolean 유형의 경우 기본값 은 false 입니다.
대한 모든 참조 형 의 디폴트 값은 이다 널 (null) .
이 모든 것을 고려하면 기본적으로 모든 배열 요소가 int 배열의 0이므로 배열 요소의 값을 0으로 초기화 할 필요가 없습니다.
배열 은 단일 유형의 고정 된 수의 값을 보유하는 컨테이너 객체 이기 때문 입니다. 이제 배열의 유형은 int 이므로 모든 배열 요소의 기본값은 자동으로 0 입니다. int 유형을 보유하고 있기 때문입니다 .
이제 모든 배열 요소의 기본값 이 null 이되도록 String 유형 의 배열 을 고려 하십시오 .
왜 그렇게하지 않습니까?
질문에서 제안한대로 루프를 사용하여 null 값을 할당 할 수 있습니다.
int arr[] = new int[10];
for(int i=0;i<arr.length;i++)
arr[i] = 0;
그러나 그렇게하면 쓸모없는 기계 사이클 손실이 발생합니다. 그리고 많은 배열이있는 응용 프로그램에서 사용하고 각 배열에 대해 수행하면 응용 프로그램 성능이 상당한 수준까지 영향을 미칩니다.
기계 사이클을 많이 사용할수록 ==> 데이터 처리에 더 많은 시간이 소요됩니다 ==> 출력 시간이 크게 증가 합니다. 따라서 응용 프로그램 데이터 처리를 낮은 수준 (일부 수준까지 느림)으로 간주 할 수 있습니다.
루프를 저장할 수 있으며 이미 0으로 초기화되었습니다. 로컬 변수의 경우에도 마찬가지입니다.
그러나 가독성을 위해 대괄호를 놓은 위치를 수정하십시오 (가장 모범 사례로 인식)
int[] arr = new int[10];
Float 또는 Integer를 사용하는 경우 다음과 같이 기본값을 지정할 수 있습니다 ...
Integer[] data = new Integer[20];
Arrays.fill(data,new Integer(0));
기존 배열 크기로 빈 배열을 새로 만들어 배열에 다시 할당 할 수 있습니다. 이것은 다른 것보다 빠를 수 있습니다. 스 니펫 :
package com.array.zero;
public class ArrayZero {
public static void main(String[] args) {
// Your array with data
int[] yourArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//Creating same sized array with 0
int[] tempArray = new int[yourArray.length];
Assigning temp array to replace values by zero [0]
yourArray = tempArray;
//testing the array size and value to be zero
for (int item : yourArray) {
System.out.println(item);
}
}
}
결과 :
0
0
0
0
0
0
0
0
0
예, 배열의 int 값은 0으로 초기화됩니다. 그러나 이것이 보장되지는 않습니다. Oracle 설명서에는 이것이 나쁜 코딩 관행이라고 명시되어 있습니다.
모든 사람들이 언급했듯이 초기화 후 int 값은 이미 0입니다. 실제로 배열 값을 0으로 설정해야하고 상황을 최적화하려는 경우 System.arraycopy
다음을 사용하십시오 .
static private int[] zeros = new float[64];
...
int[] values = ...
if (zeros.length < values.length) zeros = new int[values.length];
System.arraycopy(zeros, 0, values, 0, values.length);
이것은 memcpy
대부분 또는 모든 JRE 구현에서 다루어집니다. 최악의 경우 여러 스레드가 zeros
동시에 재 할당되므로 아무 것도 해치지 않기 때문에 이와 같이 정적을 사용하면 여러 스레드에서도 안전 합니다.
Arrays.fill
다른 사람들이 언급했듯이 사용할 수도 있습니다 . 스마트 JVM에서 사용할 Arrays.fill
수memcpy
있지만 아마도 Java 루프 일 뿐이며 그에 대한 경계 검사입니다.
물론 최적화를 벤치마킹하십시오.
Java 8 이상의 람다를 사용하는 또 다른 접근법
Arrays.stream(new Integer[nodelist.size()]).map(e ->
Integer.MAX_VALUE).toArray(Integer[]::new);
배열을 클래스에서 인스턴스 변수로 선언하십시오. 즉 모든 메소드에서 JVM이 기본값으로 0을 제공합니다. 더 이상 걱정할 필요가 없습니다
c / cpp에는 첨자가 0 인 모든 배열을 초기화하는 것 외에는 지름길이 없습니다.
int arr[10] = {0};
그러나 Java에는 Arrays.fill ()이라는 마법 도구가있어 배열의 모든 값을 선택한 정수로 채 웁니다.
import java.util.Arrays;
public class Main
{
public static void main(String[] args)
{
int ar[] = {2, 2, 1, 8, 3, 2, 2, 4, 2};
Arrays.fill(ar, 10);
System.out.println("Array completely filled" +
" with 10\n" + Arrays.toString(ar));
}
}
int a=7, b=7 ,c=0,d=0;
int dizi[][]=new int[a][b];
for(int i=0;i<a;i++){
for(int q=d;q<b;q++){
dizi[i][q]=c;
System.out.print(dizi[i][q]);
c++;
}
c-=b+1;
System.out.println();
}
결과 0123456 -1012345 -2-101234 -3-2-10123 -4-3-2-1012 -5-4-3-2-101 -6-5-4-3-2-10
참고 URL : https://stackoverflow.com/questions/2154251/any-shortcut-to-initialize-all-array-elements-to-zero
'development' 카테고리의 다른 글
C 기본 인수 (0) | 2020.04.01 |
---|---|
List 또는 Set의 첫 번째 요소를 얻는 방법은 무엇입니까? (0) | 2020.04.01 |
'\ r': 명령을 찾을 수 없음-.bashrc / .bash_profile (0) | 2020.04.01 |
MySQL의 모든 쿼리를 기록 (0) | 2020.04.01 |
NSLocalizedString이 특정 언어를 사용하도록하는 방법 (0) | 2020.04.01 |