Saya bertanya-tanya bagaimana cara menginisialisasi array integer sedemikian rupa sehingga ukuran dan nilainya berubah selama pelaksanaan program saya, ada saran?
Saya bertanya-tanya bagaimana cara menginisialisasi array integer sedemikian rupa sehingga ukuran dan nilainya berubah selama pelaksanaan program saya, ada saran?
Jawaban:
Ya: gunakan ArrayList .
Di Java, array "normal" berukuran tetap. Anda harus memberi mereka ukuran dan tidak dapat mengembangkan atau mengontraknya. Untuk mengubah ukuran, Anda harus membuat array baru dan menyalin data yang Anda inginkan - yang tidak efisien dan merepotkan Anda.
Untungnya, ada semua jenis kelas bawaan yang mengimplementasikan struktur data umum, dan juga alat berguna lainnya. Anda akan ingin memeriksa Java 6 API untuk daftar lengkapnya.
Satu peringatan: ArrayList hanya dapat menampung objek (misalnya Integer), bukan primitif (misalnya ints). Dalam KEBANYAKAN kasus, autoboxing / autounboxing akan menangani ini untuk Anda secara diam-diam, tetapi Anda bisa mendapatkan beberapa perilaku aneh tergantung pada apa yang Anda lakukan.
size
saat program berjalan; itu mendapat ukuran apa pun yang terjadi size
ketika baris itu dijalankan.
null
di bagian akhir. Ada ide mengapa?
Array di Jawa memiliki ukuran tetap. Yang Anda perlukan adalah ArrayList, salah satu dari Koleksi yang sangat berharga yang tersedia di Java.
Dari pada
Integer[] ints = new Integer[x]
Kau gunakan
List<Integer> ints = new ArrayList<Integer>();
Kemudian untuk mengubah daftar yang Anda gunakan ints.add(y)
dan di ints.remove(z)
antara banyak metode praktis lainnya yang dapat Anda temukan di Javadocs yang sesuai.
Saya sangat menyarankan mempelajari kelas Koleksi yang tersedia di Java karena sangat kuat dan memberi Anda banyak fungsionalitas bawaan yang cenderung coba ditulis ulang oleh pemula Java jika tidak perlu.
List<Integer>
bukan ArrayList<Integer>
?
Array adalah ukuran tetap setelah dipakai. Anda dapat menggunakan Daftar sebagai gantinya.
Autoboxing membuat List dapat digunakan mirip dengan array, Anda dapat memasukkan int-values ke dalamnya:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Saya tidak setuju dengan jawaban sebelumnya menyarankan ArrayList
, karena ArrayList
ini bukan Array Dinamis tapi Daftar didukung oleh sebuah array. Perbedaannya adalah Anda tidak dapat melakukan hal berikut:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
Ini akan memberi Anda IndexOutOfBoundsException karena belum ada elemen pada posisi ini meskipun larik pendukung akan mengizinkan penambahan seperti itu. Jadi, Anda perlu menggunakan implementasi Array kustom yang dapat diperpanjang seperti yang disarankan oleh @ randy-lance
Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below
public class DynamicArray {
static int []increaseSizeOfArray(int []arr){
int []brr=new int[(arr.length*2)];
for (int i = 0; i < arr.length; i++) {
brr[i]=arr[i];
}
return brr;
}
public static void main(String[] args) {
int []arr=new int[5];
for (int i = 0; i < 11; i++) {
if (i<arr.length) {
arr[i]=i+100;
}
else {
arr=increaseSizeOfArray(arr);
arr[i]=i+100;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println("arr="+arr[i]);
}
}
}
Sumber: Cara membuat dynamic array
Disarankan untuk menggunakan List untuk menangani ukuran skala kecil.
Jika Anda memiliki banyak nomor, JANGAN PERNAH gunakan List dan autoboxing,
Daftar <Integer> list
Untuk setiap int, Integer baru dibuat secara otomatis. Anda akan merasa semakin lambat ketika ukuran daftar bertambah. Integer ini adalah objek yang tidak perlu. Dalam hal ini, menggunakan ukuran perkiraan akan lebih baik,
int[] array = new int[ESTIMATED_SIZE];
Bagaimana kalau menggunakan a List
sebagai gantinya? Sebagai contoh,ArrayList<integer>
Anda tidak dapat mengubah ukuran array. Namun, Anda dapat membuat larik baru dengan ukuran yang tepat dan menyalin data dari larik lama ke larik baru.
Tetapi pilihan terbaik Anda adalah menggunakan IntList dari jacarta commons. ( disini )
Ia bekerja seperti List tetapi membutuhkan lebih sedikit ruang dan lebih efisien daripada itu, karena ia menyimpan int daripada menyimpan objek wrapper di atas int (itulah kelas Integer).
Saya menjawab pertanyaan ini dan tidak, Anda tidak memerlukan daftar larik atau hal lain, ini adalah tugas dan saya menyelesaikannya sehingga ya, larik dapat bertambah ukurannya. Berikut adalah tautan Cara menggunakan Java Dynamic Array dan ini adalah tautan untuk pertanyaan saya yang saya jawab Java Dynamic Array
int[] array = new int[size];
size
adalah variabel, tetapi panjang array harus tetap, apakah saya benar? @Lord Torgamus