Bagaimana menginisialisasi semua elemen array ke nilai tertentu di java


108

Di C/C++kami memiliki memset()fungsi yang dapat memenuhi keinginan saya tetapi Javabagaimana saya dapat menginisialisasi semua elemen ke nilai tertentu? Setiap kali kita menulis int[] array=new int[10];, ini hanya menginisialisasi larik berukuran 10 yang memiliki semua elemen sama dengan nol. Saya hanya ingin mengubah integer inisialisasi ini untuk salah satu array saya. yaitu saya ingin menginisialisasi array yang memiliki semua elemen sama dengan -1. Jika tidak, saya harus meletakkan forloop setelah inisialisasi, yang berkisar dari indeks 0ke indeks size-1dan di dalam loop itu, saya menetapkan elemen ke -1. Di bawah ini adalah kode untuk lebih memahami-

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

Apakah saya akan benar? Apakah ada cara lain untuk hal yang sama?

Jawaban:


212

Jika itu tipe primitif, Anda dapat menggunakan Arrays.fill():

Arrays.fill(array, -1);

[ Kebetulan, memsetdalam C atau C ++ hanya digunakan secara nyata untuk array char. ]


17
Saya memeriksa kode sumber Arrays.fill(). Itu melakukan hal yang sama. public static void fill(int[] a, int val) { for (int i = 0, len = a.length; i < len; i++) a[i] = val; }
Ravi Joshi

2
Ya. Seperti seharusnya. Meskipun saya curiga JIT mungkin cukup pintar untuk meningkatkan implementasi dasar.
Louis Wasserman

1
Saya tidak setuju. memsetjuga dapat digunakan, dan sebenarnya sangat berguna, dalam array integer ketika Anda perlu mengisi 0atau -1, misalnya dalam masalah DP.
Sнаđошƒаӽ

@ Sнаđошƒаӽ - Bukan dengan cara portabel.
Oliver Charlesworth

1
Hanya FYI: Anda dapat menggunakan memset_pattern4, 8 & 16 untuk ukuran integer lainnya.
geowar


5

Juga dimungkinkan dengan aliran Java 8:

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

Mungkin, bukan cara paling efisien untuk melakukan pekerjaan itu.


Ini juga akan bekerja untuk tipe non-primitif ( Stream.generate(() -> new Whatever("Hello World", 42)).limit(count).toArray();), jadi lebih fleksibel daripada Arrays.fill (). Tidak yakin dengan efisiensinya, seperti yang Anda katakan.
Christopher Riches

3

Anda bisa melakukan ini jika singkat:

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

tetapi itu menjadi buruk bagi lebih dari beberapa.

Lebih mudah menjadi forloop:

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

Sunting: Saya juga menyukai Arrays.fill()opsi yang disebutkan orang lain.


apakah ada ketentuan untuk menginisialisasi array 2 dimensi? sesuatu seperti int a [] [] = int baru [3] [4]; Array.fill (a, -1); sehingga semua 12 elemen akan disetel dengan -1.
PoornaChandra



0

Anda bisa menggunakan Arrays.fill(array, -1).


0

Ternyata Anda dapat menggunakan Arrays.fill (), cara Anda melakukannya juga berfungsi.


Ya. Bahkan Arrays.fill()menggunakan forloop dengan indeks 0ke size-1. Dengan cara yang sama, apa yang saya lakukan. Terima kasih atas jawaban Anda.
Ravi Joshi

0

Menggunakan Java 8, Anda hanya dapat menggunakan ncopiesdari Collectionskelas:

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

Dalam kasus Anda, ini akan menjadi:

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

Berikut adalah jawaban rinci dari kasus serupa milik Anda.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.