Microsoft PowerPoint - 05_collections.ppt

מסמכים קשורים
מבוא למדעי המחשב

אוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד

תרגול 1

תרגול 1

PowerPoint Presentation

איטרטורים: 1 תוכנה 1 סתיו תשע"ג תרגיל מספר 9 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה moodl

אוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ

מבוא למדעי המחשב

PowerPoint Presentation

מבוא לתכנות ב- JAVA תרגול 11

PowerPoint Presentation

PowerPoint Presentation

מבוא למדעי המחשב

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

מבוא למדעי המחשב

מהוא לתכנות ב- JAVA מעבדה 3

מבוא למדעי המחשב

סדנת תכנות ב C/C++

תרגול 1

Slide 1

PowerPoint Presentation

מבוא לתכנות ב- JAVA תרגול 7

Microsoft PowerPoint - rec3.ppt

PowerPoint Presentation

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

Slide 1

Slide 1

PowerPoint Presentation

Slide 1

PowerPoint Presentation

פייתון

הגשה תוך שבוע בשעת התרגול

שאלהIgal : מערכים דו מימדיים רקורסיה:

Microsoft Word B

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

תוכנה 1 אביב תשע"ח תרגיל מספר 8 אוספים גנריים ו- framework collection הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת ה

PowerPoint Presentation

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

Microsoft PowerPoint - lec10.ppt

תוכנה 1 בשפת Java שיעור מספר 3: "חתיכת טיפוס"

תרגול 1

אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם

מצגת של PowerPoint

מבוא למדעי המחשב

Microsoft Word - pitaron222Java_2007.doc

מתכונת עיצוב 3013

שאלהIgal : מערכים דו מימדיים רקורסיה:

תוכנה 1 תרגול מספר 12: GUI כתיבת מחלקות גנריות בית הספר למדעי המחשב אוניברסיטת תל אביב 1

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

Microsoft PowerPoint - 10_threads.ppt

PowerPoint Presentation

תרגול מס' 7: תרגילים מתקדמים ברקורסיה

מבוא למדעי המחשב

PowerPoint Presentation

PowerPoint Presentation

תרגיל 3 בקורס תוכנה 1

Microsoft PowerPoint - lec2.ppt

תוכנה 1 1 אביב תשע"ג תרגיל מספר 5 מערכים, מחרוזות, עיבוד טקסט ומבני בקרה הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגש

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

לנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי

תורת הקומפילציה

מס' סידורי: ת.ז.: עמוד 1 מתוך 20 בחינה בתוכנה 1 סמסטר ב', מועד א',תשס"ט 5/7/2009 וולף, ליאור ליאור שפירא, נעמה מאיר, מתי שמרת הוראות )נא לקרוא!( משך ה

תרגול 3 - מערכים

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

BIG DATA תיאור הקורס המונח Big Data הולך וצובר תאוצה בשנים האחרונות, הוא הופך למגמה רווחת בתעשייה. המשמעות הפרקטית של המונח Big Data הינה טכנולוגיות נ

Slide 1

Programming

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

מבוא למדעי המחשב - חובלים

שאלהIgal : מערכים דו מימדיים רקורסיה:

תכנות מונחה עצמים א' – תש"ע

Slide 1

Microsoft Word - c_SimA_MoedB2005.doc

מבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2

Tutorial 11

פתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (

PowerPoint Presentation

Homework Dry 3

שעור 6

Microsoft PowerPoint - lec9.ppt

Microsoft PowerPoint - rec1.ppt

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

עבודת בית מספר 5: מבני נתונים מבוא למדעי המחשב, סמסטר א' תשע"ט מבוא למדעי המחשב סמסטר א' תשע"ט צוות העבודה: מרצה אחראי: יוחאי טוויטו מתרגלים אחראים: א

Microsoft Word - c_SimA_MoedA2006.doc

תאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה

Slide 1

שקופית 1

Slide 1

Slide 1

Slide 1

Slide 1

תמליל:

תכ נות מת קדם בש פת Java אצ נים ו או ס פ ים (collections and iterators) אורנית דרור ואוהד ברזילי אוניברסיטת ת ל אביב

איטרטור (סודר? אצן? סורק?) איטרטור הוא הפש טה ש ל מ עבר בסדר מ וגדר מ ראש ע ל מ בנה נתונים כל ש הו כדי לבצע פעולה ישירה על מבנה נתונים, כיצד הוא מיוצג יש לד עת גישה בעזרת איטרטור למבנה הנתונים מאפשרת למשתמש לסרוק מבנה נתונים ללא צורך להכיר את המבנה הפנימי שלו 2

הדפס ת מערך (אינדקס ים) char[] letters = {'a','b','c','d','e','f'; void printletters() { System.out.print("Letters: "); גישה בעזרת מ ש ת נה העזר לנ ת ו ן עצמ ו for (int i=0 ; i < letters.length ; i++) { System.out.print(letters[i] + " "); System.out.println(); ק ידום מ שת נ ה העזר (מעבר לא יבר הבא) בדיקה: האם גלשנ ו הגדרת מ ש ת נה עזר וא תח ול ו 3

הדפס ת רשימה מק ושרת public class Cell<T> { private T content; private Cell<T> next; public Cell (T content, Cell<T> next) { this.content = content; this.next = next; public T getcontent() { return content; public Cell<T> getnext() { return next; public void setnext(cell<t> next) { this.next = next; a b c d e f 4

הדפס ת רשימה מק ושרת - המשך... public void printlist() { System.out.print("List: "); for (Cell<T> y = this ; y!= null ; y = y.getnext()) { System.out.print(y.getContent() + " "); ק ידום מ שת נ ה העזר (מעבר לא יבר הבא) גישה בעזרת מ ש ת נה העזר לנ ת ו ן עצמ ו System.out.println(); בדיקה: האם גלשנ ו הגדרת מ ש ת נה עזר וא תח ול ו a b c d e f 5

הכרות אינטימית עם מבנה הנתונים 2 הדוגמאות הקודמות חושפות ידע מוקדם שיש לכותבת פונקצית ההדפסה על מבנה הנתונים: היא יודעת איפה הוא מתחיל ואיפה הוא נגמר היא מכירה את מבנה הטיפוס שבעזרתו ניתן לקבל את המידע השמור במצביע היא יודעת איך לעבור מאיבר לאיבר שאחריו בדוגמת הרשימה המקושרת כותבת המחלקה היא זו שכתבה את מתודת ההדפסה Cell (הספ קית) זה אינו מצב רצוי - זהו רק מקרה פרטי של פעולה אחת מני רבות שלקוחות עשויים לרצות לבצע על מחלקה. על המחלקה לספק כלים ללקוחותיה לבצע פעולות כאלו בעצמם 6

האיטרטור איטרטור הוא בעצם מנשק (interface) ה מ גדיר פעו ל ות יסודיות שבע זר תן ניתן לבצע מגוון רחב ש ל פעו ל ות על אוספים ב Java טיפוס יקרא פעולות: Iterator אם ניתן לבצ ע ע ל יו 4 בדיקה האם גלשנו (hasnext()) קידום (next()) גישה לנתון עצמו (next()) הסרה של נתון (remove()) אופציונלי 7

האיטרטור כן, זה נורא! next() היא גם פקודה וגם שאי ל תה ממש כשם שמימושים מסוימים של pop() על מחסנית גם מסירים את האיבר העליון וגם מחזירים אותו בשפות אחרות :(Eiffel או c++) יש הפרדה בין קידום משתנה העזר והגישה לנתון remove() אינה חלק משרותי איטרטור (וכך גם אנו סבורים) 8

אל גוריתם כ ל ל י להד פ סת אוסף for (Iterator iter = collection.iterator(); iter.hasnext( ); ) { גישה בעזרת System.out.println(iter.next()); משתנה העזר לנתון וקידומו לאיבר הבא מבנה הנתונים עצמו אחראי לספק ללקוח איטרטור תיקני (עצם ממחלקה שמממשת את ממשק (Iterator המאותחל לתחילת מבנה הנתונים נרצה שהמחלקה Cell תספק ללקוחותיה את האפשרות לסרוק את האיברים ברשימה ממנה ואילך. לשם כך עליה לספק להם Iterator בדיקה: האם גלשנ ו הגדרת מ ש ת נה עזר וא תח ול ו 9

CellIterator ת קני class CellIterator<S> implements Iterator<S> { public CellIerator(Cell<S> cell) { this.curr = cell; public boolean hasnext() { return curr!= null; public S next() { S result = curr.getcontent(); curr = curr.getnext(); return result; public void remove() { // must be implemented private Cell<S> curr; 10

מ ספ קת Cell איטרטור לל ק ו חותיה public class Cell<T> implements Iterable<T> { //... public Iterator<T> iterator() { return new CellIterator<T>(this); מחלקות המממשות את המתודה iterator() בעצם מממשות את המנשק Iterable<T> המכיל מתודה זו בלבד הצימוד בין Cell ו- CellIterator חזק. בהמשך הקורס, כאשר נלמד מחלקות פנימיות נממש את האיטרטור כמחלקה פנימית של האוסף שעליו הוא פועל כעת הלקוח יכול לבצע פעולות על כל אברי הרשימה בלי לדעת מהו המבנה הפנימי שלה 11

printsquares public void printsquares(cell<integer> head) { for (Iterator<Integer> iter = head.iterator(); iter.hasnext();) { int i = iter.next(); Autoboxing System.out.println(i*i); What is the output for: System.out.println(iter.next()*iter.next()); (שמרו לכן על הפרדה בין פקודות לשאיתות) הלקוח מדפיס את ריבועי אברי הרשימה בלי להשתמש בעובדה שזו אכן רשימה בהמשך נראה שטיפוס הארגומנט Cell<Integer> יכול להיות מוחלף בשם הממשק Collection (אוסף נתונים כלשהו), ואז הלקוח לא ידע אפילו את שמו של טיפוס מבנה הנתונים 12

for/in (foreach) לולאת for שמבצעת את אותה פעולה על כל אברי אוסף נתונים כלשהו כה שכיחה, עד שב Java 5.0 הוסיפו אותה לשפה בתחביר מיוחד (for/in) הקוד מהשקף הקודם שקול לקוד הבא: public void printsquares(cell<integer> head) { for (int i : head) System.out.println(i*i); "...head שבאוסף הנתונים int יש לקרוא זאת כך: "לכל איבר i מטיפוס אוסף הנתונים head חייב לממש את המנשק Iterable 13

for/in (foreach) ניתן ל עבוד עם מער כים כטיפוס :Iterable int[] arr = {6,5,4,3,2,1; for (int i : arr) { System.out.println(i*i); 14

Java Collections

Java Collections Framework Collection: a group of elements Interface Based Design: Java Collections Framework Interfaces Implementations Algorithms 16

Online Resources Java 5 API Specification: http://java.sun.com/j2se/1.5.0/docs/api/index.html Sun Tutorial: http://java.sun.com/docs/books/tutorial/collections/ 17

Collection Interfaces Unordered Rejects duplicates Unordered Rejects duplicates <<interface>> Collection <<interface>> Map <<interface>> Set <<interface>> List <<interface>> Queue <<interface>> SortedMap Ordered Allows duplicates FIFO Order Allows duplicates Ordered Rejects duplicates <<interface>> SortedSet Ordered Rejects duplicates 18

The Collection Interface Doesn t hold primitives (use wrapper classes) Since Java5 collections are type-safe: Collection<String> collectionofstrings = new LinkedList<String>(); Collection<Integer> collectionofintegers = new LinkedList<Integer>(); collectionofstrings.add("hello"); collectionofintegers.add(5); collectionofintegers.add(new Integer(6)); collectionofstrings.add(7); collectionofintegers.add( world ); 19

Collection Implementations Class Name Convention: <Data structure> <Interface> General Purpose Implementations Hash Table Data Structures Resizable Array Balanced Tree Linked List Set HashSet TreeSet (SortedSet) Interfaces Queue List ArrayList LinkedList LinkedList Map HashMap TreeMap (SortedMap) 20

General Purpose Implementations No Direct Implementation <<interface>> Collection <<interface>> Map <<interface>> Set <<interface>> List <<interface>> Queue <<interface>> SortedMap <<interface>> SortedSet HashSet TreeSet ArrayList LinkedList HashMap TreeMap 21

Best Practice Specify an implementation only when a collection is constructed: Set s = new HashSet(); Interface Implementation public void foo(hashset s) { public void foo(set s) { Better! s.add() invokes HashSet.add() Works, but polymorphism 22

Interface List Example List<Integer> list = new ArrayList<Integer>(); list.add(3); list.add(1); Implementation list.add(new Integer(1)); list.add(new Integer(6)); list.remove(list.size()-1); System.out.println(list); Invokes List.toString() Output: [3, 1, 1] Insertion order is kept List allows duplicates תכנות מתקדם בשפת Java אוניברסיטת תל אביב List holds Object references (auto-boxing) remove() can get index or reference as argument 23

Set Example Set<Integer> set = new HashSet<Integer>(); set.add(3); set.add(1); set.add(new Integer(1)); set.add(new Integer(6)); set.remove(6); System.out.println(set); remove() can get only reference as argument Output: [1, 3] Insertion order is not guaranteed A set does not allow duplicates. it may not contain: two references to the same object two references to null references to two objects a and b 24 such that a.equals(b) תכנות מתקדם בשפת Java אוניברסיטת תל אביב

Queue Example Queue<Integer> queue = new LinkedList<Integer>(); queue.add(3); queue.add(1); queue.add(new Integer(1)); queue.add(new Integer(6)); queue.remove(); System.out.println(queue); Output: [1, 1, 6] Elements are added to the tail of the queue remove() may have no argument head is removed FIFO order 25

Map Example Map<String,String> map = new HashMap<String,String>(); map.put("dan", "03-9516743"); map.put("rita", "09-5076452"); No duplicates map.put("leo", "08-5530098"); map.put("rita", "06-8201124"); System.out.println(map); Unordered Output: {Leo=08-5530098, Dan=03-9516743, Rita=06-8201124 Keys (names) Dan Rita Leo Values (phone numbers) 03-9516743 תכנות מתקדם בשפת Java אוניברסיטת תל אביב 06-8201124 09-5076452 08-5530098 26

SortedMap Example SortedMap<String,String> map = new TreeMap<String,String>(); map.put("dan", "03-9516743"); map.put("rita", "09-5076452"); map.put("leo", "08-5530098"); map.put("rita", "06-8201124"); System.out.println(map); lexicographic order Output: {Dan=03-9516743, Leo=08-5530098, Rita=06-8201124 Keys (names) Dan Rita Leo Values (phone numbers) 03-9516743 תכנות מתקדם בשפת Java אוניברסיטת תל אביב 06-8201124 08-5530098 27

Map Collection Views Three views of a Map<K,V> as a collection keyset values entryset Set<K> Collection<V> Set<Map.Entry<K,V>> 28

Iterating Over the Keys of a Map Map<String,String> map = new HashMap<String,String>(); map.put("dan", "03-9516743"); map.put("rita", "09-5076452"); map.put("leo", "08-5530098"); map.put("rita", "06-8201124"); for (Iterator<String> iter= map.keyset().iterator(); iter.hasnext(); ) { System.out.println(iter.next()); Output: Leo Dan Rita 29

Iterating Over the Keys of a Map Map<String,String> map = new HashMap<String,String>(); map.put("dan", "03-9516743"); map.put("rita", "09-5076452"); map.put("leo", "08-5530098"); map.put("rita", "06-8201124"); for (String key : map.keyset()) { System.out.println(key); Output: Leo Dan Rita 30

Iterating Over the Key-Value Pairs of a Map Map<String,String> map = new HashMap<String,String>(); map.put("dan", "03-9516743"); map.put("rita", "09-5076452"); map.put("leo", "08-5530098"); map.put("rita", "06-8201124"); for (Iterator<Map.Entry<String,String>> iter= map.entryset().iterator(); iter.hasnext(); ) { Map.Entry<String,String> entry = iter.next(); System.out.println(entry.getKey() + ": " + entry.getvalue()); Output: Leo: 08-5530098 Dan: 03-9516743 Rita: 06-8201124 31

Iterating Over the Key-Value Pairs of a Map Map<String,String> map = new HashMap<String,String>(); map.put("dan", "03-9516743"); map.put("rita", "09-5076452"); map.put("leo", "08-5530098"); map.put("rita", "06-8201124"); for (Map.Entry entry : map.entryset()) { System.out.println(entry.getKey() + ": " + entry.getvalue()); Output: Leo: 08-5530098 Dan: 03-9516743 Rita: 06-8201124 32

Collection Algorithms Defined in the Collections class Main algorithms: sort binarysearch reverse Shuffle Min max 33

Sorting import java.util.*; import the package of List, Collections and Arrays public class Sort { public static void main(string args[]) { List<String> list = Arrays.asList(args); Collections.sort(list); System.out.println(list); returns a List-view of its array argument. Arguments: A C D B Output: [A, B, C, D] תכנות מתקדם בשפת Java אוניברסיטת תל אביב lexicographic order 34

Sorting (cont.) Sort a List l by Collections.sort(l); If the list consists of String objects it will be sorted in lexicographic order. Why? String implements Comparable<String>: public interface Comparable<T> { public int compareto(t o); Exception when sorting a list whose elements - do not implement Comparable or - are not mutually comparable. 35