שאלה ספציפית למתכנתים בJAVA בנוגע ל Collections - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה ספציפית למתכנתים בJAVA בנוגע ל Collections


lazy

Recommended Posts

היי.

יש לי 2 רשימות מקושרות שנניח מכילות אובייקטים של חריגות. ואני רוצה לקבל את כל מה שנמצא ברשימה הראשונה אבל לא בשנייה.

אז רציתי להשתמש ב removeAll שזה בעצם עושה את העבודה. רק ש LinkedList לא מממשת את removeAll.

מה אני כן יכולה לעשות? :-\

תודה רבה מראש

קישור לתוכן
שתף באתרים אחרים

לא הבנת.

מה שאני רוצה זה לקבל את הרשימה הראשונה מינוס האלמנטים שקיימים ברשימה השנייה.

למשל:

רשימה 1: {"a", "b", "c"}

רשימה 2: {"d", "e", "a"}

אז רשימה 1 עכשיו צריכה להיות: {"b", "c"}

ו removeAll עושה את זה.

בכל מקרה, הבעייה שלי היא להשתמש ב removeAll כש LinkedList לא מממשת את הפונקציה הזאת. מי שכן מממש זה קלאסים שהיא יורשת מהם.

קישור לתוכן
שתף באתרים אחרים

אני לא רואה סיבה למה לא להשתמש ב-removeAll שנורש מ-AbstructCollection אבל אם אתה מתעקש

          ans = new LickedList(a); // ans = a-b;

          for (int j = 0; j < ans.size(); j++) {

            if (b.contains(EntryList.get(j))) {

              ans.remove(j--);

            }

          }

קישור לתוכן
שתף באתרים אחרים

אין לי שום בעייה להשתמש ב-removeAll שנורש מ-AbstructCollection .... אם הייתי יודעת איך.

אתה כנראה לא מבין מה הבעייה כי לך זה ברור מאליו. אני חדשה לג'אווה ואני פשוט לא מבינה את כל העניין הזה. למה בכלל יש לי את האפשרות להשתמש ב removeAll שיש ב LinkedList אם היא לא ממומשת??? הרי זה יזרוק לי UnsupportedOperationException.

אז נגיד יש לי דבר כזה:

LinkedList ls1= new LinkedList();

LinkedList ls2= new LinkedList();

ונניח שמילאתי אותן באובייקטים...

ועכשיו אני רוצה לעשות:

ls1.removeAll(ls2);

זה יזרוק לי UnsupportedOperationException

אז מה אני עושה?  :'(

ובאמת תודה שאתה מנסה לעזור.

קישור לתוכן
שתף באתרים אחרים

פה עובד יופי removeAll ולא זורק שום Exception

הרעיון ב-Java שכל מחלקה (Class) יכול (וחייב) לרשת ממחלקה אחרת (אם את לא מגדירה כלום היא יורשת מהמחלקה Object)

יחד עם הירושה היא מקבל את כל הפונקציות והמשתנים שהם מסוג public. לכן מחלקה שיורשת ממחלקה אחרת יכולה להריץ את הפונקציות של המחלקה האחרת.

במקרה שלנו LinkedList יורש מימישהו שיורש ממישהו שיורש מימשהו ומישהו באמצע מממש את removeAll. אז אין שום בעיה וקרוא לפונקציה הנ"ל.

קישור לתוכן
שתף באתרים אחרים

אני כנראה סתומה לגמרי כי או שאני לא מבינה אותך או שאני לא עושה משהו טוב.

כמו שאמרתי, ביצעתי את הקוד ההוא, ובזמן ריצה, זה תמיד זורק לי UnsupportedOperationException.

שוב:

LinkedList ls1= new LinkedList();

LinkedList ls2= new LinkedList();

ls1.add("a");

ls1.add("b");

ls1.add("c");

ls1.add("d");

ls2.add("c");

ls2.add("e");

ls1.removeAll(ls2); // UnsupportedOperationException פה התוכנית עוצרת לי עם

לפי מה שקראתי איפשהו, LinkedList לא מממשת (אמנם יורשת, אבל לא מממשת) את removeAll. ובגלל זה נזרקת החריגה הזאת.

אז אתה אומר שהיא כן מממשת וכן אפשרי? אז למה אצלי זה לא עובד? :o

אגב הנה משהו שכתוב באיזה מדריך לג'אווה:

Youll discover that only a portion of the Collection and List interfaces are actually implemented. The rest of the methods cause the unwelcome appearance of something called an UnsupportedOperationException. The Collection interfaceas well as some of the other interfaces in the Java containers librarycontain optional methods, which might or might not be supported in the concrete class that implements that interface. Calling an unsupported method causes an UnsupportedOperationException to indicate a programming error

קישור לתוכן
שתף באתרים אחרים

כנראה שזה גירסה ישנה יותר

לא תהיה לך ברירה אלה להשתמש בקוד שנתתי לך

          ans = new LickedList(a); // ans = a-b;

          for (int j = 0; j < ans.size(); j++) {

            if (b.contains(EntryList.get(j))) {

              ans.remove(j--);

            }

          }

קישור לתוכן
שתף באתרים אחרים

יש לי שאלה אחרת עכשיו.

במידה ומישהו יוכל לענות לי עד היום בשעה 15:30 אני אודה לו מאוד.

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

דוגמא:

LinkedList ExList = new LinkedList();

LinkedList ExList2 = new LinkedList();

Exception a = new ClassNotFoundException();

Exception b = new ArrayIndexOutOfBoundsException("b");

Exception c = new ClassNotFoundException("c");

Exception d = new ArrayStoreException("a");

Exception e = new ClassNotFoundException();

Exception f = new UnsupportedOperationException("f");

Exception g = new NullPointerException("g");

ExList.add(a);

ExList.add(b);

ExList.add(b);

ExList.add(d);

ExList2.add(e);

ExList2.add(f);

ExList2.add(g);

if(ExList.remove(ExList2.get(0))); // false???

{

System.out.println("printing after removing ExList:");

System.out.println(ExList);

}

משום מה זה לא נכנס לי לתנאי. אבל זה כן אמור להכנס. הרי a שווה ל e לא?

אז ה remove אמור להוציא לי את האובייקט הזה מהרשימה הראשונה. וזה לא ככה. מישהו יכול להסביר לי למה?

שוב תודה וסליחה על כל ההצקות .

קישור לתוכן
שתף באתרים אחרים

LOL. זו סתם טעות הקלדה שלי כששמתי את זה פה.

בתוכנית זה היה בלי הנקודה פסיק. הרי זה היה נותן לי טעות קומפילציה אם זה היה ככה.

זו לא הבעייה.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...