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?

Ravi Joshi
sumber

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. ]

Oliver Charlesworth
sumber
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
32

Ada juga

int[] array = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
Gilbert Le Blanc
sumber
12
Bagaimana jika ukuran array tidak diketahui?
Abhishek kumar
5

Juga dimungkinkan dengan aliran Java 8:

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

Mungkin, bukan cara paling efisien untuk melakukan pekerjaan itu.

Alexey
sumber
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.

Danation
sumber
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
1

Sudahkah Anda mencoba fungsi Arrays.fill ?

Sam Goldberg
sumber
Nggak. Saya tidak menggunakannya sebelumnya.
Ravi Joshi
Bisakah Anda juga memberi contoh bagaimana ini akan terlihat?
Aenadon
@Aenadon: lihat jawaban yang diterima yang menunjukkan fungsi Arrays.fill.
Sam Goldberg
0

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


sumber
0

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

Renuz
sumber
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.

hd84335
sumber
0

Untuk Daftar, Anda dapat menggunakan

Collections.fill(arrayList, "-")

Mohan Munisifreddy
sumber