אוספים פרימיטיביים באוספי ליקוי חמה

1. הקדמה

במדריך זה נדבר על אוספים פרימיטיביים ב- Java וכיצד אוספי Eclipse יכולים לעזור.

2. מוטיבציה

נניח שאנחנו רוצים ליצור רשימה פשוטה של ​​מספרים שלמים:

רשימת myList = ArrayList חדש; int אחד = 1; myList.add (אחד);

מכיוון שאוספים יכולים להחזיק רק הפניות לאובייקטים, מאחורי הקלעים, אחד מומר ל- מספר שלם בתהליך. האיגרוף והאי-אגרוף הם כמובן לא בחינם. כתוצאה מכך, יש הפסד ביצועים בתהליך זה.

אז ראשית, שימוש באוספים פרימיטיביים מאוספי Eclipse יכול לתת לנו דחיפה מהירה.

שנית, זה מקטין את טביעת הזיכרון. התרשים שלהלן משווה את השימוש בזיכרון בין המסורתי רשימת מערך ו IntArrayList מאוספי ליקוי חמה:

* תמונה שחולצה מ //www.eclipse.org/collections/#concept

וכמובן, בל נשכח, מגוון היישומים הוא מוכר גדול עבור אוספי Eclipse.

שים לב שגם ל- Java עד כאן אין תמיכה באוספים פרימיטיביים. למרות זאת, פרויקט Valhalla דרך JEP 218 נועד להוסיף אותו.

3. תלות

נשתמש ב- Maven כדי לכלול את התלות הנדרשת:

 org.eclipse.collections ליקוי ליקויים-אפי 10.0.0 org.eclipse.collections ליקוי ליקויים 10.0.0 

4. ארוך רשימה

באוספי Eclipse יש רשימות, סטים, ערימות, מפות ותיקים המותאמים בזיכרון לכל הסוגים הפרימיטיביים. בוא נקפוץ לכמה דוגמאות.

ראשית, בואו נסתכל על רשימה של ארוךs:

@Test הציבור בטל כאשר ListOfLongHasOneTwoThree_thenSumIsSix () {MutableLongList longList = LongLists.mutable.of (1L, 2L, 3L); assertEquals (6, longList.sum ()); }

5. int רשימה

כמו כן, אנו יכולים ליצור רשימה בלתי ניתנת לשינוי של ints:

@ מבחן ציבורי בטל כאשר ListOfIntHasOneTwoThree_thenMaxIsThree () {ImmutableIntList intList = IntLists.immutable.of (1, 2, 3); assertEquals (3, intList.max ()); }

6. מפות

בנוסף ל מַפָּה שיטות ממשק, אוספי Eclipse מציגים חדשים לכל זיווג פרימיטיבי:

@Test מבטל בטל ציבוריOperationsOnIntIntMap () {MutableIntIntMap map = IntIntHashMap new (); assertEquals (5, map.addToValue (0, 5)); assertEquals (5, map.get (0)); assertEquals (3, map.getIfAbsentPut (1, 3)); }

7. מאת ניתן לנידון לאוספים פרימיטיביים

כמו כן, אוספי Eclipse עובדים עם ניתן לנידון:

@ מבחן ציבורי בטל כאשר ConvertFromIterableToPrimitive_thenValuesAreEqual () {Iterable iterable = Interval.oneTo (3); MutableIntSet intSet = IntSets.mutable.withAll (iterable); IntInterval intInterval = IntInterval.oneTo (3); assertEquals (intInterval.toSet (), intSet); }

יתר על כן, אנו יכולים ליצור מפה פרימיטיבית מ נידון:

@ מבחן ציבורי בטל כאשרCreateMapFromStream_thenValuesMustMatch () {מספרים שלמים ניתנים לשינוי = Interval.oneTo (3); MutableIntIntMap map = IntIntMaps.mutable.from (מספרים שלמים, מפתח -> מפתח, ערך -> ערך * ערך); MutableIntIntMap צפוי = IntIntMaps.mutable.empty () .withKeyValue (1, 1) .withKeyValue (2, 4) .withKeyValue (3, 9); assertEquals (צפוי, מפה); }

8. זרמים על פרימיטיבים

מכיוון שג'אווה כבר מגיעה עם זרמים פרימיטיביים, ואוספי Eclipse משתלבים איתם יפה:

@Test הציבור מבוטל כאשרCreateDoubleStream_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. מסקנה

לסיכום, הדרכה זו הציגה אוספים פרימיטיביים מאוספי ליקוי חמה. הדגמנו סיבות לשימוש בו והצגנו באיזו קלות אנו יכולים להוסיף אותו ליישומים שלנו.

כמו תמיד הקוד ניתן להשיג ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found