Daftar Nilai Integer Primitif di Jawa

1. Ikhtisar

Dalam tutorial ini, kita akan belajar bagaimana membuat daftar yang berisi nilai integer primitif .

Kami akan menjelajahi solusi menggunakan Java inti dan pustaka eksternal.

2. Autoboxing

Di Java, argumen tipe generik haruslah tipe referensi. Ini berarti kami tidak dapat melakukan sesuatu seperti List .

Sebagai gantinya, kita dapat menggunakan List dan memanfaatkan autoboxing. Autoboxing membantu kita menggunakan antarmuka Daftar seolah-olah itu berisi nilai int primitif . Di bawah tenda, itu masih merupakan koleksi Objek dan bukan primitif.

Solusi inti Java hanyalah penyesuaian untuk dapat menggunakan primitif dengan koleksi generik. Selain itu, ia datang dengan biaya konversi tinju dan unboxing.

Namun, ada opsi lain di Java dan pustaka pihak ketiga tambahan yang dapat kita gunakan. Mari kita lihat cara menggunakannya di bawah ini.

3. Menggunakan Stream API

Seringkali, kita sebenarnya tidak perlu membuat daftar sebanyak yang kita butuhkan untuk mengoperasikannya.

Dalam kasus ini, mungkin berhasil menggunakan API Stream Java 8 daripada membuat daftar sama sekali. Kelas IntSream menyediakan urutan elemen int primitif yang mendukung operasi agregat berurutan.

Mari kita lihat contohnya:

IntStream stream = IntStream.of(5, 10, 0, 2, -8);

The IntStream.of () static metode mengembalikan berurutan IntStream .

Demikian pula, kita dapat membuat IntStream dari array int yang ada :

int[] primitives = {5, 10, 0, 2, -8}; IntStream stream = IntStream.of(primitives);

Selain itu, kami dapat menerapkan operasi API Stream standar untuk mengulang, memfilter, dan menggabungkan int . Misalnya, kita dapat menghitung rata-rata dari nilai int positif :

OptionalDouble average = stream.filter(i -> i > 0).average();

Yang terpenting, tidak ada autoboxing yang digunakan saat bekerja dengan streaming.

Padahal, jika kita benar-benar membutuhkan daftar konkret, kita akan ingin melihat salah satu pustaka pihak ketiga berikut.

4. Menggunakan Trove

Trove adalah pustaka berkinerja tinggi yang menyediakan koleksi primitif untuk Java .

Untuk menyiapkan Trove dengan Maven, kita perlu menyertakan dependensi trov4j di pom.xml kita :

 net.sf.trove4j trove4j 3.0.2 

Dengan Trove, kita dapat membuat daftar, peta, dan set.

Misalnya, ada antarmuka TIntList dengan implementasi TIntArrayList -nya untuk bekerja dengan daftar nilai int :

TIntList tList = new TIntArrayList();

Meskipun TIntList tidak dapat langsung mengimplementasikan List , metodenya sangat sebanding. Solusi lain yang kami diskusikan mengikuti pola serupa.

Manfaat terbesar menggunakan TIntArrayList adalah peningkatan kinerja dan konsumsi memori . Tidak ada tambahan tinju / unboxing yang diperlukan karena menyimpan data di dalam larik int [] .

5. Menggunakan Fastutil

Pustaka berkinerja tinggi lainnya untuk bekerja dengan primitif adalah Fastutil. Mari tambahkan dependensi fastutil :

 it.unimi.dsi fastutil 8.1.0 

Sekarang, kami siap menggunakannya:

IntArrayList list = new IntArrayList();

Konstruktor default IntArrayList () secara internal membuat array primitif dengan kapasitas default 16 . Dengan nada yang sama, kita dapat menginisialisasinya dari array yang sudah ada:

int[] primitives = new int[] {5, 10, 0, 2, -8}; IntArrayList list = new IntArrayList(primitives);

6. Menggunakan Colt

Colt adalah sumber terbuka, pustaka berkinerja tinggi untuk komputasi ilmiah dan teknis . The cern.colt paket berisi daftar resizable memegang tipe data primitif seperti int .

Pertama, mari tambahkan dependensi colt :

 colt colt 1.2.0 

Daftar primitif yang menawarkan pustaka ini adalah cern.colt.list.IntArrayList:

cern.colt.list.IntArrayList coltList = new cern.colt.list.IntArrayList();

Kapasitas awal default adalah sepuluh.

7. Menggunakan Jambu Biji

Guava menyediakan sejumlah cara untuk berinteraksi antara array primitif dan API koleksi . The com.google.common.primitives paket memiliki semua kelas untuk mengakomodasi tipe primitif.

Misalnya, kelas ImmutableIntArray memungkinkan kita membuat daftar elemen int yang tidak dapat diubah .

Misalkan, kita memiliki larik nilai int berikut :

int[] primitives = new int[] {5, 10, 0, 2};

Kami cukup membuat daftar dengan array:

ImmutableIntArray list = ImmutableIntArray.builder().addAll(primitives).build();

Selain itu, ini menyediakan API daftar dengan semua metode standar yang kami harapkan.

8. Kesimpulan

Dalam artikel singkat ini, kami menunjukkan berbagai cara membuat daftar dengan bilangan bulat primitif . Dalam contoh kami, kami menggunakan pustaka Trove, Fastutil, Colt, dan Guava .

Seperti biasa, kode lengkap untuk artikel ini tersedia di GitHub.