Senarai Nilai Integer Primitif di Jawa

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan belajar bagaimana membina senarai yang mengandungi nilai integer primitif .

Kami akan mencari penyelesaian menggunakan inti Java dan perpustakaan luaran.

2. Autoboxing

Di Jawa, argumen jenis generik mestilah jenis rujukan. Ini bermaksud kita tidak dapat melakukan sesuatu seperti List .

Sebagai gantinya, kita boleh menggunakan List dan memanfaatkan autoboxing. Autoboxing membantu kita menggunakan antara muka List seolah-olah mengandungi nilai int primitif . Di bawah tudung, masih merupakan koleksi Objek dan bukan primitif.

Penyelesaian inti Java hanyalah penyesuaian untuk dapat menggunakan primitif dengan koleksi generik. Lebih-lebih lagi, ia dilengkapi dengan kos penukaran kotak dan pembatalan kotak.

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

3. Menggunakan Stream API

Sering kali, kita sebenarnya tidak perlu membuat senarai kerana kita hanya perlu mengoperasikannya.

Dalam kes ini, mungkin berfungsi untuk menggunakan Java Stream's API API daripada membuat daftar sama sekali. The IntSream kelas menyediakan urutan primitif int elemen yang menyokong urutan operasi agregat.

Mari lihat contohnya:

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

The IntStream.of () statik kaedah mengembalikan berurutan IntStream .

Begitu juga, kita dapat membuat IntStream dari pelbagai ints yang ada :

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

Lebih-lebih lagi, kita dapat menerapkan operasi API Aliran standard untuk melakukan iterasi, menyaring dan mengagregat int . Sebagai contoh, kita dapat mengira purata nilai int positif :

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

Yang paling penting, autoboxing tidak digunakan semasa bekerja dengan aliran.

Walaupun, jika kita benar-benar memerlukan senarai yang konkrit, kita ingin melihat salah satu perpustakaan pihak ketiga berikut.

4. Menggunakan Trove

Trove adalah perpustakaan berprestasi tinggi yang menyediakan koleksi primitif untuk Java .

Untuk menyiapkan Trove with Maven, kita perlu memasukkan kebergantungan trov4j dalam pom.xml kami :

 net.sf.trove4j trove4j 3.0.2 

Dengan Trove, kita dapat membuat senarai, peta, dan kumpulan.

Sebagai contoh, terdapat TIntList antara muka dengan pelaksanaan TIntArrayList untuk berfungsi dengan senarai nilai int :

TIntList tList = new TIntArrayList();

Walaupun TIntList tidak dapat melaksanakan List secara langsung , kaedahnya sangat setanding. Penyelesaian lain yang kita bincangkan mengikuti corak yang serupa.

Manfaat terbesar menggunakan TIntArrayList adalah peningkatan prestasi dan penggunaan memori . Tidak perlu tinju / unboxing tambahan kerana menyimpan data di dalam array int [] .

5. Menggunakan Fastutil

Perpustakaan berprestasi tinggi lain untuk bekerja dengan primitif adalah Fastutil. Mari tambah ketergantungan fastutil :

 it.unimi.dsi fastutil 8.1.0 

Sekarang, kami bersedia menggunakannya:

IntArrayList list = new IntArrayList();

Pembina lalai IntArrayList () secara dalaman membuat pelbagai primitif dengan kapasiti lalai 16 . Dalam urat yang sama, kita dapat menginisialisasi dari susunan yang ada:

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

6. Menggunakan Colt

Colt adalah sumber terbuka, perpustakaan berprestasi tinggi untuk pengkomputeran saintifik dan teknikal . The cern.colt pakej mengandungi senarai resizable memegang jenis data primitif seperti int .

Pertama, mari kita tambahkan kebergantungan colt :

 colt colt 1.2.0 

Senarai primitif yang menawarkan perpustakaan ini adalah cern.colt.list.IntArrayList:

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

Kapasiti awal lalai adalah sepuluh.

7. Menggunakan Jambu Batu

Jambu biji menyediakan sejumlah cara untuk menghubungkan antara array primitif dan API pengumpulan . The com.google.common.primitives pakej mempunyai semua kelas untuk menampung jenis primitif.

Sebagai contoh, kelas ImmutableIntArray membolehkan kita membuat senarai elemen int yang tidak berubah .

Katakan, kita mempunyai susunan nilai int berikut :

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

Kita hanya boleh membuat senarai dengan tatasusunan:

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

Selain itu, ia menyediakan senarai API dengan semua kaedah standard yang kami harapkan.

8. Kesimpulannya

Dalam artikel ringkas ini, kami menunjukkan pelbagai cara membuat senarai dengan bilangan bulat primitif . Dalam contoh kami, kami menggunakan perpustakaan Trove, Fastutil, Colt, dan Jambu .

Seperti biasa, kod lengkap untuk artikel ini terdapat di GitHub.