1. Pengenalan
Dalam tutorial ini, kita akan membincangkan tentang koleksi primitif di Java dan bagaimana Koleksi Eclipse dapat membantu.
2. Motivasi
Katakan kita ingin membuat senarai bilangan bulat yang mudah:
List myList = new ArrayList; int one = 1; myList.add(one);
Oleh kerana koleksi hanya dapat menyimpan rujukan objek, di belakang layar, yang satu itu ditukar menjadi Integer dalam prosesnya. Tinju dan unboxing tentu saja tidak percuma. Akibatnya, terdapat penurunan prestasi dalam proses ini.
Jadi, pertama, menggunakan koleksi primitif dari Eclipse Collections dapat memberi kita peningkatan laju.
Kedua, mengurangkan jejak memori. Grafik di bawah membandingkan penggunaan memori antara ArrayList tradisional dan IntArrayList dari Eclipse Collections:

* Gambar diekstrak dari //www.eclipse.org/collections/#concept
Dan tentu saja, jangan lupa, pelbagai pelaksanaan adalah penjual besar untuk Eclipse Collections.
Perhatikan juga bahawa Java hingga saat ini tidak mempunyai sokongan untuk koleksi primitif. Walau bagaimanapun, Projek Valhalla melalui JEP 218 bertujuan untuk menambahkannya.
3. Kebergantungan
Kami akan menggunakan Maven untuk memasukkan kebergantungan yang diperlukan:
org.eclipse.collections eclipse-collections-api 10.0.0 org.eclipse.collections eclipse-collections 10.0.0
4. Senarai panjang
Eclipse Collections mempunyai senarai, set, tumpukan, peta, dan beg yang dioptimumkan untuk semua jenis primitif. Mari kita lihat beberapa contoh.
Pertama, mari kita lihat senarai panjang :
@Test public void whenListOfLongHasOneTwoThree_thenSumIsSix() { MutableLongList longList = LongLists.mutable.of(1L, 2L, 3L); assertEquals(6, longList.sum()); }
5. int Senarai
Begitu juga, kita boleh membuat senarai int yang tidak berubah :
@Test public void whenListOfIntHasOneTwoThree_thenMaxIsThree() { ImmutableIntList intList = IntLists.immutable.of(1, 2, 3); assertEquals(3, intList.max()); }
6. Peta
Sebagai tambahan kepada kaedah antara muka Peta , Eclipse Collections menghadirkan yang baru untuk setiap pasangan primitif:
@Test public void testOperationsOnIntIntMap() { MutableIntIntMap map = new IntIntHashMap(); assertEquals(5, map.addToValue(0, 5)); assertEquals(5, map.get(0)); assertEquals(3, map.getIfAbsentPut(1, 3)); }
7. Dari Koleksi Iterable hingga Primitif
Eclipse Collections berfungsi dengan Iterable :
@Test public void whenConvertFromIterableToPrimitive_thenValuesAreEqual() { Iterable iterable = Interval.oneTo(3); MutableIntSet intSet = IntSets.mutable.withAll(iterable); IntInterval intInterval = IntInterval.oneTo(3); assertEquals(intInterval.toSet(), intSet); }
Selanjutnya, kita dapat membuat peta primitif dari Iterable:
@Test public void whenCreateMapFromStream_thenValuesMustMatch() { Iterable integers = Interval.oneTo(3); MutableIntIntMap map = IntIntMaps.mutable.from( integers, key -> key, value -> value * value); MutableIntIntMap expected = IntIntMaps.mutable.empty() .withKeyValue(1, 1) .withKeyValue(2, 4) .withKeyValue(3, 9); assertEquals(expected, map); }
8. Aliran pada Primitif
Oleh kerana Java sudah dilengkapi dengan aliran primitif, dan Eclipse Collections berintegrasi dengan baik:
@Test public void whenCreateDoubleStream_thenAverageIsThree() { DoubleStream doubleStream = DoubleLists .mutable.with(1.0, 2.0, 3.0, 4.0, 5.0) .primitiveStream(); assertEquals(3, doubleStream.average().getAsDouble(), 0.001); }
9. Kesimpulannya
Kesimpulannya, tutorial ini memaparkan koleksi primitif dari Eclipse Collections. Kami menunjukkan alasan untuk menggunakannya dan menunjukkan betapa mudahnya kami dapat menambahkannya ke aplikasi kami.
Seperti biasa kodnya tersedia di GitHub.