הרבה מתחילים מערבבים את הרעיון של שיטת Arrays.asList() עם מבנה הנתונים ArrayList. למרות שהם עשויים להיראות ולהישמע דומים, שני אלה שונים לחלוטין כשמדובר ביישום. בפוסט זה, נסקור את השימוש הבסיסי בשיטת Arrays.asList() ונברור כמה בלבולים רווחים הקשורים אליה.
מדוע נעשה שימוש ב-Arrays.asList()?
אם יש לך Array שאתה צריך להפוך לרשימה אז java.util.Arrays מספקת עטיפה Arrays.asList() לשרת מטרה זו. במילים פשוטות, שיטה זו לוקחת מערך כפרמטר ומחזירה רשימה. חלקים עיקריים של ה-API של פלטפורמת Java פותחו לפני הצגת מסגרת האוספים. אז מדי פעם, ייתכן שיהיה עליך לתרגם בין מערכים מסורתיים לבין האוספים המודרניים יותר. פונקציה זו משמשת כקישור בין אוספים לממשקי API מבוססי מערך.דוגמא
תסתכל על הדוגמה הבאה:import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
String[] teamMembers = {"Amanda", "Loren", "Keith"};
// using aslist() method
List teamList = Arrays.asList(teamMembers);
System.out.println("List : " + teamList);
HashSet teamHashSet = new HashSet<>(Arrays.asList(teamMembers));
System.out.println("HashSet : " + teamHashSet);
}
}
תְפוּקָה:
רשימה : [Amanda, Loren, Keith] HashSet : [Keith, Loren, Amanda] // HashSet לא שומר על סדר
כיצד Arrays.asList() ו- ArrayList שונים?
כאשר אתה קורא לשיטת Arrays.asList() במערך, האובייקט המוחזר אינו ArrayList ( יישום מערך שניתן לשנות את גודלו של ממשק List ). זהו אובייקט תצוגה עם שיטות get() ו- set() הנותנות גישה למערך הבסיסי. כל השיטות שישנו את גודל המערך כמו add() או remove() של האיטרטור המשויך זורקות UnsupportedOperationException . הסיבה לכך שתוכנית java מתחברת בהצלחה אך נותנת חריגה בזמן ריצה היא שככל הנראה, "List" מוחזר כתוצאה מ- Arrays.asList() . כאשר כל פעולות ההוספה/מחיקה מותרות. אבל מכיוון שמבנה הנתונים הבסיסי הוא "מערך" שאינו ניתן לשינוי , ולכן יוצא חריג בזמן הריצה. הנה קטע שמראה איך זה נראה:import java.util.Arrays;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
Integer[] diceRoll = new Integer[6];
//using aslist() method
List diceRollList = Arrays.asList(diceRoll);
System.out.println(diceRollList);
// using getters and setters to randomly access the list
diceRollList.set(5, 6);
diceRollList.set(0, 1);
System.out.println(diceRollList.get(5));
System.out.println(diceRollList.get(1));
System.out.println(diceRollList);
diceRollList.add(7); // Add a new Integer to the list
}
}
תְפוּקָה:
[null, null, null, null, null, null] 6 null [1, null, null, null, null, 6] חריגה בשרשור "ראשי" java.lang.UnsupportedOperationException ב-java.util.AbstractList.add(AbstractList. java:148) ב-java.util.AbstractList.add(AbstractList.java:108) ב-ArraysAsListDemo.main(ArraysAsListDemo.java:20)
דוגמאות לשימוש בשיטת asList()
החל מ-Java SE 5.0, השיטה asList() מוכרזת כבעלת מספר משתנה של ארגומנטים. במקום להעביר מערך, אתה יכול גם להעביר אלמנטים בודדים. לדוגמה:import java.util.Arrays;
import java.util.List;
public class ArraysAsListDemo {
public static void main(String[] args) {
List seasons = Arrays.asList("winter", "summer", "spring", "fall");
List odds = Arrays.asList(1, 3, 5, 7, 9);
System.out.println(seasons);
System.out.println(odds);
}
}
תְפוּקָה:
[חורף, קיץ, אביב, סתיו] [1, 3, 5, 7, 9]
GO TO FULL VERSION