배열의 모든 요소를 ​​Java의 특정 값으로 초기화하는 방법


108

에서 C/C++우리는이 memset()내 소원을 성취하지만,에서 수 기능이 Java어떻게 특정 값으로 모든 요소를 초기화 할 수 있습니까? 를 작성할 때마다 int[] array=new int[10];모든 요소가 0 인 크기 10의 배열을 초기화합니다. 내 배열 중 하나에 대해이 초기화 정수를 변경하고 싶습니다. 즉, 모든 요소가 같은 배열을 초기화하고 싶습니다 -1. 그렇지 않으면 for초기화 직후 0에 인덱스 에서 인덱스 에 이르는 루프 를 넣어야하며 size-1해당 루프 내부에 요소를 할당합니다 -1. 아래는 더 많은 이해를위한 코드입니다.

    int[] array = new int[10];
    for (int i = 0; i < size; i++) {
        array[i] = -1;
    }

내가 맞습니까? 같은 다른 방법이 있습니까?

답변:


212

기본 유형 인 경우 다음을 사용할 수 있습니다 Arrays.fill().

Arrays.fill(array, -1);

[ 덧붙여 말하면, memsetC 또는 C ++에서 char. ]


17
의 소스 코드를 확인했습니다 Arrays.fill(). 같은 일을합니다. public static void fill(int[] a, int val) { for (int i = 0, len = a.length; i < len; i++) a[i] = val; }
Ravi Joshi

2
네. 그래야합니다. JIT가 기본 구현을 개선 할만큼 충분히 똑똑 할 수 있다고 생각하지만.
Louis Wasserman 2012

1
동의하지 않습니다. memset또한 사용할 수 있으며 실제로는 DP 문제 와 같이 0또는 로 채워야 할 때 정수 배열에서 매우 유용합니다 -1.
Sнаđошƒаӽ

@ Sнаđошƒаӽ-휴대용 방식이 아닙니다.
Oliver Charlesworth

1
참고로 다른 정수 크기에는 memset_pattern4, 8 및 16을 사용할 수 있습니다.
geowar


5

Java 8 스트림에서도 가능합니다.

int[] a = IntStream.generate(() -> value).limit(count).toArray();

하지만 작업을 수행하는 가장 효율적인 방법은 아닐 것입니다.


이것은 원시 유형이 아닌 유형 ( Stream.generate(() -> new Whatever("Hello World", 42)).limit(count).toArray();) 에서도 작동 하므로 Arrays.fill ()보다 유연합니다. 그래도 효율성에 대해서는 확신하지 못합니다.
Christopher Riches

3

짧으면 이렇게 할 수 있습니다.

int[] array = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};

그러나 그것은 단지 몇 가지 이상으로 나빠집니다.

for루프 가 더 쉽습니다 .

  int[] myArray = new int[10];
  for (int i = 0; i < array.length; i++)
       myArray[i] = -1;

편집 : Arrays.fill()다른 사람들이 언급 한 옵션 도 마음에 듭니다.


2 차원 배열을 초기화하는 조항이 있습니까? int a [] [] = new int [3] [4]; Arrays.fill (a, -1); 12 개의 요소가 모두 -1로 설정되도록합니다.
PoornaChandra



0

사용할 수 있습니다 Arrays.fill(array, -1).


0

분명히 Arrays.fill ()을 사용할 수 있습니다. 당신이 한 방식도 작동합니다.


당신. 심지어 Arrays.fill()사용하여 for인덱스 루프 0에를 size-1. 같은 방식으로 내가 한 일. 답변 주셔서 감사합니다.
Ravi Joshi

0

자바 (8)를 사용하면 간단하게 사용할 수 ncopiesCollections클래스 :

Object[] arrays = Collections.nCopies(size, object).stream().toArray();

귀하의 경우에는 다음과 같습니다.

Integer[] arrays = Collections.nCopies(10, Integer.valueOf(1)).stream().toArray(Integer[]::new);
.

다음 은 유사한 경우에 대한 자세한 답변입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.