logo

מבני נתונים ב-Java

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

המאמר יחקור את כל מה שקשור למבני הנתונים ב-Java, והוא עוזר למתחילים להבין בקלות וביעילות.

  • מה זה Java?
  • מהם מבני נתונים ב-Java?
  • סוגי מבני נתונים ב-Java
  • היתרונות של מבני נתונים ב-Java
  • סיווג מבני נתונים
  • מבני נתונים ב-Java שאלות נפוצות

מה זה Java?

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

מהם מבני נתונים ב-Java?

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

סוגי מבני נתונים ב-Java

רשימת מבני הנתונים ב-Java הרשומה להלן

  1. מערכים
  2. רשימת מערך
  3. רשימה מקושרת
  4. לַעֲרוֹם
  5. תוֹר
  6. מפת גיבוב
  7. HashSet
  8. TreeSet
  9. מפת עץ
  10. גרָף
  11. עֵץ

התרשים שלהלן מסביר בבירור את סוגי מבני הנתונים ב-Java בצורה ברורה מאוד.

מבני נתונים ב-Java

סיווג נוסף של סוגי מבני נתונים:

ישנם שני סוגים של מבני נתונים: -

  1. מבני נתונים פרימיטיביים
  2. מבני נתונים לא פרימיטיביים

1) מבני נתונים פרימיטיביים: ידועים גם כסוגי נתונים פרימיטיביים, אלו הם סוגי נתונים מובנים בסיסיים ב-Java. הם כוללים:

    בייט:מאחסן מספרים שלמים מ-128 עד 127.קצר:מאחסן מספרים שלמים מ-32,768 עד 32,767.int:מאחסן מספרים שלמים מ-2,147,483,648 עד 2,147,483,647.לָצוּף:מאחסן מספרי נקודה צפה בדיוק יחיד.לְהַשְׁחִיר:מאחסן תווים בודדים.בוליאני:מאחסן ערכי אמת או שקר.ארוך:מאחסן מספרים שלמים גדולים.לְהַכפִּיל:מאחסן מספרים של פקטור צף בדיוק כפול.

2) מבני נתונים לא פרימיטיביים: מבני רשומות לא פרימיטיביות מורכבים יותר ומורכבים ממיני מידע פרימיטיביים. בנוסף, ניתן לסווג אותם לשני סוגים:

    מבני נתונים ליניאריים:במבני נתונים ליניאריים, האלמנטים מסודרים באופן ליניארי או ברצף. דוגמאות מכילות:
      מערכים:קבוצה של אלמנטים בעלי סוג זהה המוצבים במערך לפי סידור קבוע מראש.ערימות:מבנה Last-In-First-Out (LIFO) שבו ניתן להוסיף או להסיר רק את הפריטים העליונים ביותר.פרָאק:מבנים של First-In-First-Out (FIFO) מנוצלים בתורים, שבהם פריטים מוכנסים לחלק המוחזר ומוציאים אותם בחזית.רשימה מקושרת:רשימה קשורה כוללת אוסף של גאדג'טים המכונים צמתים, שלכל אחד מהם יש הפניה לצומת שאחריו וסטטיסטיקה בתוכו.
    מבני נתונים לא ליניאריים:במבני נתונים לא ליניאריים, האלמנטים מסודרים באופן לא רציף. דוגמאות מכילות:
      עצים:עצים הם סוג של מבנה היררכי מבוסס-צומת, עם צומת שורש בחלק העליון וצמתים צאצאים מסתעפים ממנו. דוגמאות כוללות עצים אדומים-שחורים, עצי AVL, עצי חיפוש בינאריים ועצים בינאריים.גרפים:קבוצה של צמתים מקושרים באמצעות קצוות, שבהם לצמתים עשויים להיות כל כמות של חיבורים. גרפים משמשים לסמל יחסים מורכבים בין פריטים.ערימה:מבנה מיוחד מבוסס עץ שבו לכל צומת נחוש יש ערך יותר או קטן מהילדים שלו, בהסתמך על האם מדובר בערימה מקסימלית או ערימה מינימלית.בְּלִיל:מבני נתונים המשתמשים בפונקציית Hash כדי למפות מפתחות לערכים. הדוגמאות כוללות ערכות גיבוב ומפות גיבוב, המספקות שליפה ירוקה ואחסון סטטיסטיקות המבוססות על מפתחות מדויקים.
מבני נתונים ב-Java

היתרונות של מבני נתונים ב-Java

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

1) מערכים:

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

יתרונות:

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

חסרונות:

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

פונקציות:

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

יישום:

שם קובץ: ArrayExample.java

 import java.util.*; public class ArrayExample { public static void main(String[] args) { int[] numbers={10,20,30,40,50}; // Initialize an array of integers System.out.println(&apos;Element at index 0:&apos;+numbers[0]); System.out.println(&apos;Element at index 2:&apos;+numbers[2]); System.out.println(&apos;Element at index 4:&apos;+numbers[4]); int sum=0; for (int i=0;i<numbers.length;i++) { sum+="numbers[i];" } system.out.println('sum of array elements:'+sum); numbers[2]="35;" update an element in the system.out.println('updated at index 2:'+numbers[2]); system.out.println('elements array:'); for (int number:numbers) system.out.println(number); < pre> <p> <strong>Output:</strong> </p> <pre> Element at index 0:10 Element at index 2:30 Element at index 4:50 Sum of array elements:150 Updated element at index 2:35 Elements in the array: 10 20 35 40 50 </pre> <h3>2) ArrayList:</h3> <p>ArrayList in Java is a dynamic data structure that allows for the storage and manipulation of elements. It is part of the Java Collections Framework and is implemented using an array internally.</p> <p> <strong>Advantages:</strong> </p> <ol class="points"> <tr><td>Dynamic Size:</td> Unlike arrays, ArrayLists can dynamically grow or shrink in size as elements are added or removed. It eliminates the need for manual resizing and allows for handling varying amounts of data conveniently. </tr><tr><td>Easy Element Manipulation:</td> ArrayLists offer methods to add, remove, and modify elements at any position within the list. Its flexibility simplifies common operations such as insertion, deletion, and updating, making element manipulation more efficient. </tr><tr><td>Random Access:</td> ArrayLists support random Access to elements using their index, enabling quick retrieval and modification of elements at specific positions within the list. It facilitates efficient element access and enhances overall performance. </tr><tr><td>Compatibility with Java Collection Framework:</td> ArrayLists implement the List interface, making them compatible with other Collection classes in the Java Collections Framework. Its compatibility allows for seamless integration with various algorithms and operations provided by the framework. </tr></ol> <p> <strong>Disadvantages:</strong> </p> <ol class="points"> <tr><td>Higher Memory Overhead:</td> ArrayLists require additional memory to maintain their internal structure, resulting in higher memory overhead compared to arrays. It can be a concern when dealing with large collections of elements. </tr><tr><td>Slower Insertion and Deletion:</td> Inserting or deleting elements in the middle of an ArrayList requires shifting elements, which can be time-consuming for large lists. In scenarios where frequent insertion or deletion operations are expected, other data structures like LinkedList may offer better performance. </tr><tr><td>Limited Performance for Search:</td> Searching for an element in an unsorted ArrayList requires iterating over the elements until a match is found. It is a linear search approach that results in slower search performance compared to data structures optimized for searching, such as HashSet or TreeMap. </tr><tr><td>No Primitive Type Support:</td> ArrayLists can only store objects and do not directly support primitive data types like int or char. To store primitive types, wrapper classes like Integer or Character need to be used, leading to potential autoboxing and unboxing overhead. </tr></ol> <p> <strong>Functions:</strong> </p> <ol class="points"> <tr><td>Creating an ArrayList:</td> Declare and initialize an ArrayList using the ArrayList class and specify the element type within the angle brackets. </tr><tr><td>Adding Elements:</td> Use the add method to append elements at the end of the ArrayList. </tr><tr><td>Accessing Elements:</td> Use the get technique to retrieve the price of detail at a selected index. </tr><tr><td>Modifying Elements:</td> Update the cost of detail at a specific index for the usage of the set approach. </tr><tr><td>Finding Size:</td> Use the dimensions method to get the cutting-edge quantity of factors in the ArrayList. </tr><tr><td>Removing Elements:</td> Use the remove approach to delete a detail at a specific index or via providing the object reference. </tr><tr><td>Iterating through the ArrayList:</td> Use loops to iterate over each element in the ArrayList and perform operations on them. </tr></ol> <p> <strong>Implementation:</strong> </p> <p> <strong>FileName:</strong> ArrayListExample.java</p> <pre> import java.util.*; public class ArrayListExample { public static void main(String[] args) { // Create an ArrayList to store integers ArrayList numbers=new ArrayList(List.of(10,20,30,40,50)); //Access and print elements from the ArrayList System.out.println(&apos;Element at index 0:&apos;+numbers.get(0)); System.out.println(&apos;Element at index 2:&apos;+numbers.get(2)); System.out.println(&apos;Element at index 4:&apos;+numbers.get(4)); // Calculate and print the sum of all elements in the ArrayList int sum=numbers.stream().mapToInt(Integer::intValue).sum(); System.out.println(&apos;Sum of ArrayList elements:&apos;+sum); // Update an element in the ArrayList numbers.set(2,35); System.out.println(&apos;Updated element at index 2:&apos;+numbers.get(2)); // Iterate through the ArrayList using a for-each loop and print the elements System.out.println(&apos;Elements in the ArrayList:&apos;); for (int number:numbers) { System.out.println(number); } } } </pre> <p> <strong>Output:</strong> </p> <pre> Element at index 0:10 Element at index 2:30 Element at index 4:50 Sum of ArrayList elements:150 Updated element at index 2:35 Elements in the ArrayList: 10 20 35 40 50 </pre> <h3>3) Linked List:</h3> <p>A linked list is a linear data structure in which elements are stored in separate objects called nodes. A reference link to the following node in the sequence is included in each node&apos;s data element. The list&apos;s final node links to null, indicating that the list has ended.</p> <p>Unlike arrays, linked lists do not require contiguous memory allocation. Each node in a linked list can be allocated independently, allowing for dynamic memory allocation and efficient insertion and deletion operations.</p> <p> <strong>Advantages:</strong> </p> <ol class="points"> <tr><td>Dynamic Size:</td> LinkedList can grow or shrink dynamically, making it suitable for varying or unknown data sizes. </tr><tr><td>Efficient Insertion and Deletion:</td> Inserting or deleting elements within a LinkedList is efficient, as it does not require shifting elements. </tr><tr><td>No Contiguous Memory Requirement:</td> LinkedList does not need contiguous memory allocation, making it flexible and suitable for unpredictable memory situations. </tr><tr><td>Easy Modification:</td> LinkedList allows easy modification of elements by changing reference pointers, enabling efficient manipulation. </tr></ol> <p> <strong>Disadvantages:</strong> </p> <ol class="points"> <tr><td>Slower Random Access:</td> LinkedList has slower random Access as it requires traversing the list to access elements by index. </tr><tr><td>Increased Memory Overhead:</td> LinkedList requires additional memory for references and nodes, increasing memory overhead compared to arrays. </tr><tr><td>Inefficient Search:</td> LinkedList has slower search operations, requiring sequential iteration to find specific elements. </tr></ol> <p> <strong>Functions:</strong> </p> <ol class="points"> <tr><td>Creating a LinkedList:</td> Declare and initialize a LinkedList using the LinkedList class. </tr><tr><td>Adding Elements:</td> Use the add method to append elements at the end of the LinkedList. </tr><tr><td>Accessing Elements:</td> Use the get method to retrieve the value of an element at a specific index. </tr><tr><td>Modifying Elements:</td> Update the value of an element at a particular index using the set method. </tr><tr><td>Removing Elements:</td> Use the remove method to delete an element at a specific index or by providing the object reference. </tr></ol> <p> <strong>Implementation:</strong> </p> <p> <strong>FileName:</strong> LinkedList1.java</p> <pre> import java.util.*; public class LinkedList1 { public static void main(String[] args) { // Create a LinkedList to store integers LinkedList linkedList1 = new LinkedList(); // Add elements to the LinkedList linkedList1.add(10); linkedList1.add(20); linkedList1.add(30); linkedList1.add(40); linkedList1.add(50); // Print the LinkedList System.out.println(&apos;LinkedList:&apos;+linkedList1); // Remove an element from the LinkedList linkedList1.removeFirst(); System.out.println(&apos;LinkedList after removing first element:&apos;+linkedList1); // Check if an element exists in the LinkedList boolean containsElement=linkedList1.contains(30); System.out.println(&apos;LinkedList contains element 30?&apos;+containsElement); // Get the first and last elements of the LinkedList int firstElement=linkedList1.getFirst(); int lastElement=linkedList1.getLast(); System.out.println(&apos;First element:&apos;+firstElement); System.out.println(&apos;Last element:&apos;+lastElement); // Clear the LinkedList linkedList1.clear(); System.out.println(&apos;LinkedList after clearing:&apos;+linkedList1); } } </pre> <p> <strong>Output:</strong> </p> <pre> LinkedList:[10, 20, 30, 40, 50] LinkedList after removing first element:[20, 30, 40, 50] LinkedList contains element 30?true First element:20 Last element:50 LinkedList after clearing:[] </pre> <h3>4) Stack:</h3> <p>The Last-In-First-Out (LIFO) principle dictates that the element that was most recently inserted is also the element that is removed first. A stack is a linear data structure that follows this rule. It employs the commands &apos;push&apos; and &apos;pop&apos; to add elements to the stack and, accordingly, remove the top element from the stack. The &apos;peek&apos; technique additionally enables Access to the top element without removing it.</p> <p> <strong>Features of a stack:</strong> </p> <ol class="points"> <tr><td>LIFO behavior:</td> The last element pushed onto the stack is the first one to be popped out, making it suitable for applications where the order of insertion and removal is important. </tr><tr><td>Limited Access:</td> Stacks typically provide restricted Access to elements. You can only access the topmost element, and to reach other elements, you need to pop the elements above them. </tr><tr><td>Dynamic size:</td> Stacks can be implemented using arrays or linked lists, allowing for a dynamic size. They can grow or shrink as needed during runtime. </tr></ol> <p> <strong>Advantages:</strong> </p> <ol class="points"> <tr><td>Simplicity:</td> Stacks are easy to understand and implement. </tr><tr><td>Efficiency:</td> Insertion and deletion operations have a time complexity of O(1). </tr><tr><td>Function call management:</td> Stacks efficiently manage function calls and variable storage. </tr><tr><td>Undo/Redo functionality:</td> Stacks enable undo and redo operations in applications. </tr></ol> <p> <strong>Disadvantages:</strong> </p> <ol class="points"> <tr><td>Limited Access:</td> Access to elements is restricted to the top of the stack. </tr><tr><td>Size restrictions:</td> Stacks may have size limitations depending on the implementation. </tr><tr><td>Not suitable for all scenarios:</td> Stacks are specific to LIFO behavior and may not be appropriate in other cases. </tr></ol> <p> <strong>Implementation:</strong> </p> <p> <strong>FileName:</strong> StackExample.java</p> <pre> import java.util.Stack; public class StackExample { public static void main(String[] args) { // Create a stack Stack stack=new Stack(); // Push elements onto the stack stack.push(10); stack.push(20); stack.push(30); // Print the top element of the stack System.out.println(&apos;Top element:&apos;+stack.peek()); // Pop elements from the stack int poppedElement=stack.pop(); System.out.println(&apos;Popped element:&apos;+poppedElement); // Check if the stack is empty System.out.println(&apos;Is stack empty?&apos;+stack.isEmpty()); // Get the size of the stack System.out.println(&apos;Stack size:&apos;+stack.size()); // Iterate over the stack System.out.println(&apos;Stack elements:&apos;); for (Integer element:stack) { System.out.println(element); } } } </pre> <p> <strong>Output:</strong> </p> <pre> Top element:30 Popped element:30 Is stack empty?false Stack size:2 Stack elements: 10 20 </pre> <h3>5) Queue:</h3> <p>A queue is a linear data structure in Java that follows the First-In-First-Out (FIFO) principle. It represents a collection of elements where elements are inserted at the rear and removed from the front.</p> <p> <strong>Features:</strong> </p> <ol class="points"> <tr><td>Enqueue:</td> Adding an element to the rear of the queue. </tr><tr><td>Dequeue:</td> Removing an element from the front of the queue. </tr><tr><td>Peek:</td> Retrieve the element at the front of the queue without removing it. </tr><tr><td>Size:</td> Determining the number of elements in the queue. </tr><tr><td>Empty Check:</td> Checking if the queue is empty. </tr></ol> <p> <strong>Advantages:</strong> </p> <ol class="points"> <tr><td>FIFO Behavior:</td> Elements are processed in the order of their insertion, ensuring the preservation of the original sequence. </tr><tr><td>Efficient Insertion and Removal:</td> Adding and removing elements from a queue is fast and has a constant time complexity of O(1). </tr><tr><td>Synchronization:</td> Java provides synchronized queue implementations, making them safe for concurrent programming. </tr><tr><td>Standardized Interface:</td> The Queue interface in Java offers a common set of methods, allowing easy interchangeability between different queue implementations. </tr></ol> <p> <strong>Disadvantages:</strong> </p> <ol class="points"> <tr><td>No Random Access:</td> Queues do not support direct Access to elements in the middle. Accessing specific positions requires dequeuing preceding elements. </tr><tr><td>Limited Size:</td> Some queue implementations have a fixed size or capacity, leading to overflow or exceptions when exceeding the maximum size. </tr><tr><td>Inefficient Search:</td> Searching for an element in a queue requires dequeuing until a match is found, resulting in a linear search with potentially high time complexity. </tr></ol> <p> <strong>Implementation:</strong> </p> <p> <strong>FileName:</strong> QueueExample.java</p> <pre> import java.util.Stack; import java.util.LinkedList; import java.util.Queue; public class QueueExample { public static void main(String[] args) { // Create a Queue to store integers Queue queue=new LinkedList(); // Enqueue elements to the Queue queue.offer(10); queue.offer(20); queue.offer(30); queue.offer(40); queue.offer(50); //Access and print the front element of the Queue System.out.println(&apos;Front element:&apos;+queue.peek()); // Dequeue elements from the Queue and print them while (!queue.isEmpty()) { int element=queue.poll(); System.out.println(&apos;Dequeued element:&apos;+element); } } } </pre> <p> <strong>Output:</strong> </p> <pre> Front element:10 Dequeued element:10 Dequeued element:20 Dequeued element:30 Dequeued element:40 Dequeued element:50 </pre> <h3>6) HashMap:</h3> <p>A HashMap is a data structure in Java that provides a way to store and retrieve key-value pairs. It is part of the Java Collections Framework and is implemented based on the hash table data structure.</p> <p> <strong>Functions:</strong> </p> <ul> <tr><td>put(key, value):</td> Inserts the specified key-value pair into the HashMap. </tr><tr><td>get(key):</td> Retrieves the value associated with the specified key. </tr><tr><td>containsKey(key):</td> Checks if the HashMap contains the specified key. </tr><tr><td>containsValue(value):</td> Checks if the HashMap contains the specified value. </tr><tr><td>remove(key):</td> Removes the key-value pair associated with the specified key from the HashMap. </tr><tr><td>size():</td> Returns the number of key-value pairs in the HashMap. </tr><tr><td>isEmpty():</td> Checks if the HashMap is empty. </tr><tr><td>keySet():</td> Returns a Set containing all the keys in the HashMap. </tr><tr><td>values():</td> Returns a Collection containing all the values in the HashMap. </tr><tr><td>clear():</td> Removes all the key-value pairs from the HashMap. </tr></ul> <p> <strong>Advantages:</strong> </p> <ol class="points"> <tr><td>Efficient Retrieval:</td> HashMap provides fast retrieval of values based on keys with constant-time complexity O(1). </tr><tr><td>Flexible Key-Value Pairing:</td> HashMap allows any non-null object as a key, enabling custom-defined keys for storing and retrieving data. </tr><tr><td>Dynamic Size:</td> HashMap can dynamically grow or shrink in size to handle varying amounts of data. </tr><tr><td>Compatibility with Java Collections Framework:</td> HashMap implements the Map interface, allowing seamless integration with other Collection classes. </tr></ol> <p> <strong>Disadvantages:</strong> </p> <ol class="points"> <tr><td>Lack of Ordering:</td> HashMap does not preserve the order of elements. Use LinkedHashMap or TreeMap for specific ordering requirements. </tr><tr><td>Increased Memory Overhead:</td> HashMap requires additional memory for hash codes and internal structure compared to simpler data structures. </tr><tr><td>Slower Iteration:</td> Iterating over a HashMap can be slower compared to arrays or lists due to traversing the underlying hash table. </tr></ol> <p> <strong>Implementation:</strong> </p> <p> <strong>FileName:</strong> HashMapExample.java</p> <pre> import java.util.HashMap; public class HashMapExample { public static void main(String[] args) { // Create a HashMap to store String keys and Integer values HashMap hashMap=new HashMap(); // Add key-value pairs to the HashMap hashMap.put(&apos;John&apos;,25); hashMap.put(&apos;Alice&apos;,30); hashMap.put(&apos;Bob&apos;,35); //Access and print values based on keys System.out.println(&apos;Age of John:&apos;+hashMap.get(&apos;John&apos;)); System.out.println(&apos;Age of Alice:&apos;+hashMap.get(&apos;Alice&apos;)); // Check if a key exists in the HashMap System.out.println(&apos;Is Bob present?&apos;+hashMap.containsKey(&apos;Bob&apos;)); // Update the value associated with a key hashMap.put(&apos;Alice&apos;,32); // Remove a key-value pair from the HashMap hashMap.remove(&apos;John&apos;); // Print all key-value pairs in the HashMap System.out.println(&apos;Key-Value pairs in the HashMap:&apos;); for (String key : hashMap.keySet()) { System.out.println(key+&apos;:&apos;+hashMap.get(key)); } // Check the size of the HashMap System.out.println(&apos;Size of the HashMap:&apos;+hashMap.size()); } } </pre> <p> <strong>Output:</strong> </p> <pre> Age of John:25 Age of Alice:30 Is Bob present?true Key-Value pairs in the HashMap: Bob:35 Alice:32 Size of the HashMap:2 </pre> <h3>7) HashSet:</h3> <p>HashSet is a data structure in Java that implements the Set interface and stores elements in a hash table.</p> <p> <strong>Features:</strong> </p> <ol class="points"> <tr><td>Stores unique elements:</td> HashSet does not allow duplicate elements. Each element in the HashSet is unique. </tr><tr><td>Uses hash-based lookup:</td> HashSet uses the hash value of each element to determine its storage location, providing efficient element retrieval. </tr><tr><td>Unordered collection:</td> The elements in a HashSet are not stored in a specific order. The order of elements may change over time. </tr></ol> <p> <strong>Advantages:</strong> </p> <ol class="points"> <tr><td>Fast element lookup:</td> HashSet provides fast lookup operations, making it efficient to check if an element exists in the set. </tr><tr><td>No duplicate elements:</td> HashSet automatically handles duplicate elements and ensures that each element is unique. </tr><tr><td>Integration with Java Collections Framework:</td> HashSet implements the Set interface, making it compatible with other collection classes in the Java Collections Framework. </tr></ol> <p> <strong>Disadvantages:</strong> </p> <ol class="points"> <tr><td>No guaranteed order:</td> HashSet does not maintain the order of elements. If the order of elements is important, HashSet is not suitable. </tr><tr><td>No indexing:</td> HashSet does not provide direct indexing or positional Access to elements. To access elements, you need to iterate over the set. </tr><tr><td>Higher memory overhead:</td> HashSet requires additional memory to store hash values and maintain the hash table structure, resulting in higher memory usage compared to some other data structures. </tr></ol> <p> <strong>Implementation:</strong> </p> <p> <strong>FileName:</strong> HashSetExample.java</p> <pre> import java.util.HashSet; public class HashSetExample { public static void main(String[] args) { // Create a HashSet HashSet set=new HashSet(); // Add elements to the HashSet set.add(&apos;Apple&apos;); set.add(&apos;Banana&apos;); set.add(&apos;Orange&apos;); set.add(&apos;Grapes&apos;); set.add(&apos;Mango&apos;); // Print the HashSet System.out.println(&apos;HashSet:&apos;+set); // Check if an element exists System.out.println(&apos;Contains &apos;Apple&apos;:&apos;+set.contains(&apos;Apple&apos;)); // Remove an element set.remove(&apos;Banana&apos;); // Print the updated HashSet System.out.println(&apos;Updated HashSet:&apos;+set); // Get the size of the HashSet System.out.println(&apos;Size of HashSet:&apos;+set.size()); // Clear the HashSet set.clear(); // Check if the HashSet is empty System.out.println(&apos;Is HashSet empty?&apos;+set.isEmpty()); } } </pre> <p> <strong>Output:</strong> </p> <pre> HashSet:[Apple, Grapes, Mango, Orange, Banana] Contains &apos;Apple&apos;:true Updated HashSet:[Apple, Grapes, Mango, Orange] Size of HashSet:4 Is HashSet empty?true </pre> <h3>8) TreeSet:</h3> <p>TreeSet is an implementation of the SortedSet interface in Java that uses a self-balancing binary search tree called a red-black tree to store elements in sorted order.</p> <p> <strong>Advantages:</strong> </p> <ol class="points"> <tr><td>Sorted Order:</td> TreeSet automatically maintains the elements in a sorted order based on their natural ordering or a custom comparator. It allows for efficient searching and retrieval of elements in ascending or descending order. </tr><tr><td>No Duplicate Elements:</td> TreeSet does not allow duplicate elements. It ensures that each element in the set is unique, which can be useful in scenarios where duplicate values should be avoided. </tr><tr><td>Efficient Operations:</td> TreeSet provides efficient operations like insertion, deletion, and searching. These operations have a time complexity of O(log n), where n is the number of elements in the set. </tr><tr><td>Navigable Set Operations:</td> TreeSet provides additional navigational methods, such as higher(), lower(), ceiling(), and floor(), which allow you to find elements that are greater than, less than, or equal to a given value. </tr></ol> <p> <strong>Disadvantages:</strong> </p> <ol class="points"> <tr><td>Overhead:</td> TreeSet requires additional memory to store the internal data structure, which can lead to higher memory overhead compared to other set implementations. </tr><tr><td>Slower Insertion and Removal:</td> Insertion and removal operations in TreeSet involve maintaining the sorted order of elements, which may require tree restructuring. It can make these operations slightly slower compared to HashSet or LinkedHashSet. </tr><tr><td>Limited Customization:</td> TreeSet is primarily designed for natural ordering or a single custom comparator. It may need more flexibility for multiple sorting criteria or complex sorting logic. </tr></ol> <p> <strong>Functions:</strong> </p> <ul> <tr><td>add(element):</td> Adds an element to the TreeSet while maintaining the sorted order. </tr><tr><td>remove(element):</td> Removes the specified element from the TreeSet. </tr><tr><td>contains(element):</td> Checks if the TreeSet contains the specified element. </tr><tr><td>size():</td> Returns the number of elements in the TreeSet. </tr><tr><td>first():</td> Returns the first (lowest) element in the TreeSet. </tr><tr><td>last():</td> Returns the last (highest) element in the TreeSet. </tr><tr><td>higher(element):</td> Returns the least element in the TreeSet that is strictly greater than the given element. </tr><tr><td>lower(element):</td> Returns the greatest element in the TreeSet that is strictly less than the given element. </tr></ul> <p> <strong>Implementation:</strong> </p> <p> <strong>FileName:</strong> TreeSetExample.java</p> <pre> import java.util.TreeSet; public class TreeSetExample { public static void main(String[] args) { // Create a TreeSet TreeSet numbers=new TreeSet(); // Add elements to the TreeSet numbers.add(5); numbers.add(2); numbers.add(8); numbers.add(1); numbers.add(4); // Print the TreeSet System.out.println(&apos;Elements in the TreeSet:&apos;+numbers); // Check if an element exists System.out.println(&apos;Does TreeSet contain 4?&apos;+numbers.contains(4)); // Remove an element numbers.remove(2); // Print the TreeSet after removal System.out.println(&apos;Elements in the TreeSet after removal:&apos;+numbers); // Get the size of the TreeSet System.out.println(&apos;Size of the TreeSet:&apos;+numbers.size()); // Get the first and last element System.out.println(&apos;First element:&apos;+numbers.first()); System.out.println(&apos;Last element:&apos;+numbers.last()); // Iterate over the TreeSet System.out.println(&apos;Iterating over the TreeSet:&apos;); for (int number:numbers) { System.out.println(number); } } } </pre> <p> <strong>Output:</strong> </p> <pre> Elements in the TreeSet:[1, 2, 4, 5, 8] Does TreeSet contain 4? true Elements in the TreeSet after removal:[1, 4, 5, 8] Size of the TreeSet:4First element:1 Last element:8 Iterating over the TreeSet: 1 4 5 8 </pre> <h3>9) TreeMap:</h3> <p>TreeMap is a class in Java that implements the Map interface and provides a sorted key-value mapping based on the natural order of the keys or a custom comparator.</p> <p> <strong>Advantages:</strong> </p> <ol class="points"> <tr><td>Sorted Ordering:</td> TreeMap maintains the keys in sorted order, which allows for efficient searching, retrieval, and range-based operations. </tr><tr><td>Key-Value Mapping:</td> TreeMap stores key-value pairs, enabling efficient lookup and retrieval of values based on the associated keys. </tr><tr><td>Red-Black Tree Implementation:</td> TreeMap uses a balanced binary search tree (Red-Black Tree) internally, ensuring efficient performance even for large datasets. </tr><tr><td>Support for Custom Comparators:</td> TreeMap allows the use of custom comparators to define the sorting order of the keys, providing flexibility in sorting criteria. </tr></ol> <p> <strong>Disadvantages:</strong> </p> <ol class="points"> <tr><td>Memory Overhead:</td> TreeMap requires additional memory to store the internal tree structure and associated objects, resulting in higher memory usage compared to simpler data structures like HashMap. </tr><tr><td>Slower Insertion and Deletion:</td> Insertion and deletion operations in TreeMap have a time complexity of O(log n) due to the need for tree restructuring, making them slower compared to HashMap or LinkedHashMap. </tr><tr><td>Limited Performance for Unsorted Data:</td> TreeMap performs efficiently for sorted data, but its performance can degrade when dealing with unsorted data or frequent modifications, as it requires maintaining the sorted order. </tr></ol> <p> <strong>Functions:</strong> </p> <ul> <tr><td>put(key, value):</td> Inserts a key-value pair into the TreeMap. </tr><tr><td>get(key):</td> Retrieves the value associated with the specified key. </tr><tr><td>containsKey(key):</td> Checks if the TreeMap contains a specific key. </tr><tr><td>remove(key):</td> Removes the key-value pair associated with the specified key. </tr><tr><td>size():</td> Returns the number of key-value pairs in the TreeMap. </tr><tr><td>keySet():</td> Returns a set of all keys in the TreeMap. </tr><tr><td>values():</td> Returns a collection of all values in the TreeMap. </tr><tr><td>entrySet():</td> Returns a set of key-value pairs in the TreeMap. </tr></ul> <p> <strong>Implementation:</strong> </p> <p> <strong>FileName:</strong> TreeMapExample.java</p> <pre> import java.util.TreeMap; public class TreeMapExample { public static void main(String[] args) { // Create a TreeMap TreeMap scores=new TreeMap(); // Insert key-value pairs into the TreeMap scores.put(&apos;Alice&apos;,90); scores.put(&apos;Bob&apos;,80); scores.put(&apos;Charlie&apos;,95); scores.put(&apos;David&apos;,87); scores.put(&apos;Eve&apos;,92); //Access and print values from the TreeMap System.out.println(&apos;Score of Alice:&apos;+scores.get(&apos;Alice&apos;)); System.out.println(&apos;Score of Charlie:&apos;+scores.get(&apos;Charlie&apos;)); System.out.println(&apos;Score of David:&apos;+scores.get(&apos;David&apos;)); // Update a value in the TreeMap scores.put(&apos;Bob&apos;,85); // Remove a key-value pair from the TreeMap scores.remove(&apos;Eve&apos;); // Iterate through the TreeMap using a for-each loop System.out.println(&apos;Scores in the TreeMap:&apos;); for (String name:scores.keySet()) { int score=scores.get(name); System.out.println(name+&apos;:&apos;+score); } } } </pre> <p> <strong>Output:</strong> </p> <pre> Score of Alice:90 Score of Charlie:95 Score of David:87 Scores in the TreeMap: Alice:90 Bob:85 Charlie:95 David:87 </pre> <h3>10) Graph:</h3> <p>Graphs are data structure that represents a collection of interconnected nodes or vertices. They are composed of vertices and edges, where vertices represent entities and edges represent the relationships between those entities.</p> <p> <strong>Advantages:</strong> </p> <ol class="points"> <tr><td>Versatility:</td> Graphs can represent a wide range of real-world scenarios, making them suitable for various applications such as social networks, transportation systems, and computer networks. </tr><tr><td>Relationship Representation:</td> Graphs provide a natural way to represent relationships and connections between entities, allowing for efficient analysis and traversal of these relationships. </tr><tr><td>Efficient Search and Traversal:</td> Graph algorithms like breadth-first search (BFS) and depth-first search (DFS) enable efficient traversal and searching of the graph&apos;s vertices and edges. </tr><tr><td>Modeling Complex Relationships:</td> Graphs can model complex relationships, including hierarchical structures, cyclic dependencies, and multiple connections between entities. </tr></ol> <p> <strong>Disadvantages:</strong> </p> <ol class="points"> <tr><td>Space Complexity:</td> Graphs can consume a significant amount of memory, especially large-scale graphs with many vertices and edges. </tr><tr><td>The complexity of Operations:</td> Certain graph operations, such as finding the shortest path or detecting cycles, can have high time complexity, particularly in dense graphs. </tr><tr><td>Difficulty in Maintenance:</td> Modifying or updating a graph can be complex, as changes in the graph&apos;s structure may impact its connectivity and existing algorithms. </tr></ol> <p> <strong>Implementation:</strong> </p> <p> <strong>FileName:</strong> GraphExample.java</p> <pre> import java.util.*; public class GraphExample { private int V; // Number of vertices private List<list> adjacencyList; // Adjacency list representation public GraphExample(int V) { this.V=V; adjacencyList=new ArrayList(V); // Initialize the adjacency list for (int i=0;i<v;i++) { adjacencylist.add(new arraylist()); } function to add an edge between two vertices public void addedge(int source,int destination) adjacencylist.get(source).add(destination); adjacencylist.get(destination).add(source); perform breadth-first search traversal of the graph bfs(int startvertex) boolean[] visited="new" boolean[v]; queue linkedlist(); visited[startvertex]="true;" queue.add(startvertex); while (!queue.isempty()) int currentvertex="queue.poll();" system.out.print(currentvertex+' '); list neighbors="adjacencyList.get(currentVertex);" for (int neighbor:neighbors) if (!visited[neighbor]) visited[neighbor]="true;" queue.add(neighbor); system.out.println(); depth-first dfs(int dfsutil(startvertex,visited); private dfsutil(int vertex,boolean[] visited) visited[vertex]="true;" system.out.print(vertex+' dfsutil(neighbor,visited); static main(string[] args) v="5;" number graphexample graphexample(v); edges graph.addedge(0,1); graph.addedge(0,2); graph.addedge(1,3); graph.addedge(2,3); graph.addedge(2,4); system.out.print('bfs traversal: graph.bfs(0); system.out.print('dfs graph.dfs(0); < pre> <p> <strong>Output:</strong> </p> <pre> BFS traversal: 0 1 2 3 4 DFS traversal: 0 1 3 2 4 </pre> <h3>11) Tree:</h3> <p>A tree is a widely used data structure in computer science that represents a hierarchical structure. It consists of nodes connected by edges, where each node can have zero or more child nodes.</p> <p> <strong>Advantages:</strong> </p> <ol class="points"> <tr><td>Hierarchical Structure:</td> Trees provide a natural way to represent hierarchical relationships, such as file systems, organization charts, or HTML/XML documents. </tr><tr><td>Efficient Search:</td> Binary search trees enable efficient searching with a time complexity of O(log n), making them suitable for storing and retrieving sorted data. </tr><tr><td>Fast Insertion and Deletion:</td> Tree data structures offer efficient insertion and deletion operations, especially when balanced, such as AVL trees or Red-Black trees. </tr><tr><td>Ordered Iteration:</td> In-order traversal of a binary search tree gives elements in a sorted order, which is helpful for tasks like printing elements in sorted order or finding the next/previous element. </tr></ol> <p> <strong>Disadvantages:</strong> </p> <ol class="points"> <tr><td>High Memory Overhead:</td> Trees require additional memory to store node references or pointers, which can result in higher memory usage compared to linear data structures like arrays or lists. </tr><tr><td>Complex Implementation:</td> Implementing and maintaining a tree data structure can be more complex compared to other data structures like arrays or lists, especially for balanced tree variants. </tr><tr><td>Limited Operations:</td> Some tree variants, like binary search trees, do not support efficient operations like finding the kth smallest element or finding the rank of an element. </tr></ol> <p> <strong>Functions:</strong> </p> <ol class="points"> <tr><td>Insertion:</td> Add a new node to the tree. </tr><tr><td>Deletion:</td> Remove a node from the tree. </tr><tr><td>Search:</td> Find a specific node or element in the tree. </tr><tr><td>Traversal:</td> Traverse the tree in different orders, such as in-order, pre-order, or post-order. </tr><tr><td>Height/Depth:</td> Calculate the height or depth of the tree. </tr><tr><td>Balance:</td> Ensure the tree remains balanced to maintain efficient operations. </tr></ol> <p> <strong>Implementation:</strong> </p> <p> <strong>FileName:</strong> TreeExample.java</p> <pre> import java.util.*; class TreeNode { int value; TreeNode left; TreeNode right; public TreeNode(int value) { this.value = value; left = null; right = null; } } public class TreeExample { public static void main(String[] args) { // Create a binary search tree TreeNode root = new TreeNode(50); root.left = new TreeNode(30); root.right = new TreeNode(70); root.left.left = new TreeNode(20); root.left.right = new TreeNode(40); root.right.left = new TreeNode(60); root.right.right = new TreeNode(80); // Perform common operations System.out.println(&apos;In-order Traversal:&apos;); inOrderTraversal(root); System.out.println(&apos;
Search for value 40: &apos;+search(root, 40)); System.out.println(&apos;Search for value 90: &apos;+search(root, 90)); int minValue = findMinValue(root); System.out.println(&apos;Minimum value in the tree: &apos;+minValue); int maxValue = findMaxValue(root); System.out.println(&apos;Maximum value in the tree: &apos;+maxValue); } // In-order traversal: left subtree, root, right subtree public static void inOrderTraversal(TreeNode node) { if (node != null) { inOrderTraversal(node.left); System.out.print(node.value + &apos; &apos;); inOrderTraversal(node.right); } } // Search for a value in the tree public static boolean search(TreeNode node, int value) { if (node == null) return false; if (node.value == value) return true; if (value <node.value) return search(node.left, value); else search(node.right, } find the minimum value in tree public static int findminvalue(treenode node) { if (node.left="=" null) node.value; findminvalue(node.left); maximum findmaxvalue(treenode (node.right="=" findmaxvalue(node.right); < pre> <p> <strong>Output:</strong> </p> <pre> In-order Traversal:20 30 40 50 60 70 80 Search for value 40: true Search for value 90: false Minimum value in the tree: 20 Maximum value in the tree: 80 </pre> <hr></node.value)></pre></v;i++)></list></pre></numbers.length;i++)>

2) ArrayList:

ArrayList ב-Java הוא מבנה נתונים דינמי המאפשר אחסון ומניפולציה של אלמנטים. זה חלק מ-Java Collections Framework והוא מיושם באמצעות מערך פנימי.

יתרונות:

    גודל דינמי:שלא כמו מערכים, ArrayLists יכולים לגדול או להתכווץ באופן דינמי בגודלם כאשר אלמנטים מתווספים או מסירים. זה מבטל את הצורך בשינוי גודל ידני ומאפשר טיפול בכמויות שונות של נתונים בצורה נוחה.מניפולציה קלה של אלמנטים:ArrayLists מציעים שיטות להוסיף, להסיר ולשנות אלמנטים בכל מיקום ברשימה. הגמישות שלו מפשטת פעולות נפוצות כגון הכנסה, מחיקה ועדכון, מה שהופך את המניפולציה של אלמנטים ליעילה יותר.גישה אקראית:ArrayLists תומכים בגישה אקראית לאלמנטים באמצעות האינדקס שלהם, מה שמאפשר שליפה ושינוי מהירים של אלמנטים במיקומים ספציפיים ברשימה. זה מקל על גישה יעילה לאלמנטים ומשפר את הביצועים הכוללים.תאימות עם Java Collection Framework:ArrayLists מיישמים את ממשק List, מה שהופך אותם לתואמים למחלקות Collections אחרות במסגרת Java Collections Framework. התאימות שלו מאפשרת אינטגרציה חלקה עם אלגוריתמים ופעולות שונות שמספקת המסגרת.

חסרונות:

    תקרת זיכרון גבוהה יותר:רשימות ArrayLists דורשות זיכרון נוסף כדי לשמור על המבנה הפנימי שלהן, וכתוצאה מכך לתקורת זיכרון גבוהה יותר בהשוואה למערכים. זה יכול להדאיג כשעוסקים באוספים גדולים של אלמנטים.הכנסה ומחיקה איטית יותר:הוספה או מחיקה של אלמנטים באמצע ArrayList מצריכה רכיבים בהחלפת אלמנטים, מה שעלול לקחת זמן עבור רשימות גדולות. בתרחישים שבהם צפויות פעולות הכנסה או מחיקה תכופות, מבני נתונים אחרים כמו LinkedList עשויים להציע ביצועים טובים יותר.ביצועים מוגבלים לחיפוש:חיפוש אלמנט ב-ArrayList לא ממוין דורש איטרציה על האלמנטים עד שנמצא התאמה. זוהי גישת חיפוש ליניארי שמביאה לביצועי חיפוש איטיים יותר בהשוואה למבני נתונים המותאמים לחיפוש, כגון HashSet או TreeMap.אין תמיכה בסוג פרימיטיבי:ArrayLists יכולים לאחסן אובייקטים בלבד ואינם תומכים ישירות בסוגי נתונים פרימיטיביים כמו int או char. כדי לאחסן טיפוסים פרימיטיביים, יש להשתמש במחלקות עטיפה כמו אינטגר או תווים, מה שמוביל לתקורה אוטומטית ו- unboxing פוטנציאלית.

פונקציות:

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

יישום:

שם קובץ: ArrayListExample.java

 import java.util.*; public class ArrayListExample { public static void main(String[] args) { // Create an ArrayList to store integers ArrayList numbers=new ArrayList(List.of(10,20,30,40,50)); //Access and print elements from the ArrayList System.out.println(&apos;Element at index 0:&apos;+numbers.get(0)); System.out.println(&apos;Element at index 2:&apos;+numbers.get(2)); System.out.println(&apos;Element at index 4:&apos;+numbers.get(4)); // Calculate and print the sum of all elements in the ArrayList int sum=numbers.stream().mapToInt(Integer::intValue).sum(); System.out.println(&apos;Sum of ArrayList elements:&apos;+sum); // Update an element in the ArrayList numbers.set(2,35); System.out.println(&apos;Updated element at index 2:&apos;+numbers.get(2)); // Iterate through the ArrayList using a for-each loop and print the elements System.out.println(&apos;Elements in the ArrayList:&apos;); for (int number:numbers) { System.out.println(number); } } } 

תְפוּקָה:

 Element at index 0:10 Element at index 2:30 Element at index 4:50 Sum of ArrayList elements:150 Updated element at index 2:35 Elements in the ArrayList: 10 20 35 40 50 

3) רשימה מקושרת:

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

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

יתרונות:

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

חסרונות:

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

פונקציות:

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

יישום:

שם קובץ: LinkedList1.java

 import java.util.*; public class LinkedList1 { public static void main(String[] args) { // Create a LinkedList to store integers LinkedList linkedList1 = new LinkedList(); // Add elements to the LinkedList linkedList1.add(10); linkedList1.add(20); linkedList1.add(30); linkedList1.add(40); linkedList1.add(50); // Print the LinkedList System.out.println(&apos;LinkedList:&apos;+linkedList1); // Remove an element from the LinkedList linkedList1.removeFirst(); System.out.println(&apos;LinkedList after removing first element:&apos;+linkedList1); // Check if an element exists in the LinkedList boolean containsElement=linkedList1.contains(30); System.out.println(&apos;LinkedList contains element 30?&apos;+containsElement); // Get the first and last elements of the LinkedList int firstElement=linkedList1.getFirst(); int lastElement=linkedList1.getLast(); System.out.println(&apos;First element:&apos;+firstElement); System.out.println(&apos;Last element:&apos;+lastElement); // Clear the LinkedList linkedList1.clear(); System.out.println(&apos;LinkedList after clearing:&apos;+linkedList1); } } 

תְפוּקָה:

 LinkedList:[10, 20, 30, 40, 50] LinkedList after removing first element:[20, 30, 40, 50] LinkedList contains element 30?true First element:20 Last element:50 LinkedList after clearing:[] 

4) מחסנית:

עקרון Last-In-First-Out (LIFO) מכתיב שהאלמנט שהוכנס לאחרונה הוא גם האלמנט שהוסר ראשון. מחסנית היא מבנה נתונים ליניארי העוקב אחר כלל זה. הוא משתמש בפקודות 'דחיפה' ו'פופ' כדי להוסיף אלמנטים לערימה ובהתאם, להסיר את האלמנט העליון מהמחסנית. טכניקת ה'הצצה' מאפשרת בנוסף גישה לאלמנט העליון מבלי להסירו.

תכונות של מחסנית:

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

יתרונות:

    פַּשְׁטוּת:ערימות קלות להבנה ויישום.יְעִילוּת:לפעולות הכנסה ומחיקה יש מורכבות זמן של O(1).ניהול שיחות פונקציה:ערימות מנהלות ביעילות קריאות פונקציות ואחסון משתנה.פונקציונליות ביטול/בצע מחדש:ערימות מאפשרות פעולות ביטול וביצוע חוזר באפליקציות.

חסרונות:

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

יישום:

שם קובץ: StackExample.java

 import java.util.Stack; public class StackExample { public static void main(String[] args) { // Create a stack Stack stack=new Stack(); // Push elements onto the stack stack.push(10); stack.push(20); stack.push(30); // Print the top element of the stack System.out.println(&apos;Top element:&apos;+stack.peek()); // Pop elements from the stack int poppedElement=stack.pop(); System.out.println(&apos;Popped element:&apos;+poppedElement); // Check if the stack is empty System.out.println(&apos;Is stack empty?&apos;+stack.isEmpty()); // Get the size of the stack System.out.println(&apos;Stack size:&apos;+stack.size()); // Iterate over the stack System.out.println(&apos;Stack elements:&apos;); for (Integer element:stack) { System.out.println(element); } } } 

תְפוּקָה:

 Top element:30 Popped element:30 Is stack empty?false Stack size:2 Stack elements: 10 20 

5) תור:

תור הוא מבנה נתונים ליניארי ב-Java העוקב אחר עקרון First-In-First-Out (FIFO). הוא מייצג אוסף של אלמנטים שבהם אלמנטים מוכנסים מאחור ומוסרים מלפנים.

מאפיינים:

    תור:הוספת אלמנט לחלק האחורי של התור.תור:הסרת אלמנט מחזית התור.לְהָצִיץ:אחזר את האלמנט בקדמת התור מבלי להסיר אותו.גודל:קביעת מספר האלמנטים בתור.צ'ק ריק:בודק אם התור ריק.

יתרונות:

    התנהגות FIFO:אלמנטים מעובדים לפי סדר הכנסתם, מה שמבטיח את שימור הרצף המקורי.הכנסה והסרה יעילה:הוספה והסרה של אלמנטים מהתור היא מהירה ובעלת מורכבות זמן קבועה של O(1).סִנכְּרוּן:Java מספקת יישומי תור מסונכרנים, מה שהופך אותם לבטוחים לתכנות בו-זמנית.ממשק סטנדרטי:ממשק ה-Queue ב-Java מציע סט שיטות נפוץ, המאפשר החלפה קלה בין יישומי תור שונים.

חסרונות:

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

יישום:

שם קובץ: QueueExample.java

 import java.util.Stack; import java.util.LinkedList; import java.util.Queue; public class QueueExample { public static void main(String[] args) { // Create a Queue to store integers Queue queue=new LinkedList(); // Enqueue elements to the Queue queue.offer(10); queue.offer(20); queue.offer(30); queue.offer(40); queue.offer(50); //Access and print the front element of the Queue System.out.println(&apos;Front element:&apos;+queue.peek()); // Dequeue elements from the Queue and print them while (!queue.isEmpty()) { int element=queue.poll(); System.out.println(&apos;Dequeued element:&apos;+element); } } } 

תְפוּקָה:

 Front element:10 Dequeued element:10 Dequeued element:20 Dequeued element:30 Dequeued element:40 Dequeued element:50 

6) HashMap:

HashMap הוא מבנה נתונים ב-Java המספק דרך לאחסן ולאחזר צמדי מפתח-ערך. זה חלק מ-Java Collections Framework והוא מיושם על סמך מבנה הנתונים של טבלת הגיבוב.

פונקציות:

    put(key, value):מכניס את צמד המפתח-ערך שצוין לתוך HashMap.להשיג מפתח):מאחזר את הערך המשויך למפתח שצוין.containsKey(מפתח):בודק אם HashMap מכיל את המפתח שצוין.containsValue(value):בודק אם HashMap מכיל את הערך שצוין.הסר (מפתח):מסיר את צמד המפתח-ערך המשויך למפתח שצוין מ-HashMap.גודל():מחזירה את מספר זוגות המפתח-ערך ב-HashMap.זה ריק():בודק אם HashMap ריק.סט מפתחות():מחזירה סט המכיל את כל המפתחות ב-HashMap.ערכים():מחזירה אוסף המכיל את כל הערכים ב-HashMap.ברור():מסיר את כל צמדי המפתח-ערך מה-HashMap.

יתרונות:

    אחזור יעיל:HashMap מספק שליפה מהירה של ערכים המבוססים על מפתחות עם מורכבות בזמן קבוע O(1).זיווג מפתח-ערך גמיש:HashMap מאפשר כל אובייקט שאינו ריק כמפתח, ומאפשר מפתחות מוגדרים בהתאמה אישית לאחסון ואחזור נתונים.גודל דינמי:HashMap יכול לגדול או להצטמצם באופן דינמי כדי להתמודד עם כמויות שונות של נתונים.תאימות עם Java Collections Framework:HashMap מיישמת את ממשק Map, ומאפשרת אינטגרציה חלקה עם מחלקות Collection אחרות.

חסרונות:

    חוסר הזמנה:HashMap לא שומרת על סדר האלמנטים. השתמש ב-LinkedHashMap או ב-TreeMap לדרישות הזמנה ספציפיות.תקרת זיכרון מוגברת:HashMap דורש זיכרון נוסף עבור קודי Hash ומבנה פנימי בהשוואה למבני נתונים פשוטים יותר.איטרציה איטית יותר:איטרציה על גבי HashMap יכולה להיות איטית יותר בהשוואה למערכים או רשימות עקב מעבר בטבלת הגיבוב הבסיסית.

יישום:

שם קובץ: HashMapExample.java

 import java.util.HashMap; public class HashMapExample { public static void main(String[] args) { // Create a HashMap to store String keys and Integer values HashMap hashMap=new HashMap(); // Add key-value pairs to the HashMap hashMap.put(&apos;John&apos;,25); hashMap.put(&apos;Alice&apos;,30); hashMap.put(&apos;Bob&apos;,35); //Access and print values based on keys System.out.println(&apos;Age of John:&apos;+hashMap.get(&apos;John&apos;)); System.out.println(&apos;Age of Alice:&apos;+hashMap.get(&apos;Alice&apos;)); // Check if a key exists in the HashMap System.out.println(&apos;Is Bob present?&apos;+hashMap.containsKey(&apos;Bob&apos;)); // Update the value associated with a key hashMap.put(&apos;Alice&apos;,32); // Remove a key-value pair from the HashMap hashMap.remove(&apos;John&apos;); // Print all key-value pairs in the HashMap System.out.println(&apos;Key-Value pairs in the HashMap:&apos;); for (String key : hashMap.keySet()) { System.out.println(key+&apos;:&apos;+hashMap.get(key)); } // Check the size of the HashMap System.out.println(&apos;Size of the HashMap:&apos;+hashMap.size()); } } 

תְפוּקָה:

 Age of John:25 Age of Alice:30 Is Bob present?true Key-Value pairs in the HashMap: Bob:35 Alice:32 Size of the HashMap:2 

7) HashSet:

HashSet הוא מבנה נתונים ב-Java שמיישם את ממשק ה-Set ומאחסן אלמנטים בטבלת Hash.

מאפיינים:

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

יתרונות:

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

חסרונות:

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

יישום:

שם קובץ: HashSetExample.java

 import java.util.HashSet; public class HashSetExample { public static void main(String[] args) { // Create a HashSet HashSet set=new HashSet(); // Add elements to the HashSet set.add(&apos;Apple&apos;); set.add(&apos;Banana&apos;); set.add(&apos;Orange&apos;); set.add(&apos;Grapes&apos;); set.add(&apos;Mango&apos;); // Print the HashSet System.out.println(&apos;HashSet:&apos;+set); // Check if an element exists System.out.println(&apos;Contains &apos;Apple&apos;:&apos;+set.contains(&apos;Apple&apos;)); // Remove an element set.remove(&apos;Banana&apos;); // Print the updated HashSet System.out.println(&apos;Updated HashSet:&apos;+set); // Get the size of the HashSet System.out.println(&apos;Size of HashSet:&apos;+set.size()); // Clear the HashSet set.clear(); // Check if the HashSet is empty System.out.println(&apos;Is HashSet empty?&apos;+set.isEmpty()); } } 

תְפוּקָה:

 HashSet:[Apple, Grapes, Mango, Orange, Banana] Contains &apos;Apple&apos;:true Updated HashSet:[Apple, Grapes, Mango, Orange] Size of HashSet:4 Is HashSet empty?true 

8) TreeSet:

TreeSet הוא יישום של ממשק SortedSet ב-Java המשתמש בעץ חיפוש בינארי מאוזן עצמי הנקרא עץ אדום-שחור כדי לאחסן אלמנטים בסדר ממוין.

יתרונות:

    סדר ממוין:TreeSet שומר אוטומטית על האלמנטים בסדר ממוין על סמך הסדר הטבעי שלהם או השוואה מותאמת אישית. הוא מאפשר חיפוש ואחזור יעילים של אלמנטים בסדר עולה או יורד.ללא רכיבים כפולים:TreeSet אינו מאפשר רכיבים כפולים. זה מבטיח שכל רכיב בקבוצה הוא ייחודי, מה שיכול להיות שימושי בתרחישים שבהם יש להימנע מערכים כפולים.תפעול יעיל:TreeSet מספק פעולות יעילות כמו הכנסה, מחיקה וחיפוש. לפעולות אלו יש מורכבות זמן של O(log n), כאשר n הוא מספר האלמנטים בקבוצה.פעולות סט ניתנות לניווט:TreeSet מספק שיטות ניווט נוספות, כגון (higher(), lower(), תקרה() ו- floor(), המאפשרות לך למצוא אלמנטים שגדולים, קטנים מ- או שווים לערך נתון.

חסרונות:

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

פונקציות:

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

יישום:

שם קובץ: TreeSetExample.java

 import java.util.TreeSet; public class TreeSetExample { public static void main(String[] args) { // Create a TreeSet TreeSet numbers=new TreeSet(); // Add elements to the TreeSet numbers.add(5); numbers.add(2); numbers.add(8); numbers.add(1); numbers.add(4); // Print the TreeSet System.out.println(&apos;Elements in the TreeSet:&apos;+numbers); // Check if an element exists System.out.println(&apos;Does TreeSet contain 4?&apos;+numbers.contains(4)); // Remove an element numbers.remove(2); // Print the TreeSet after removal System.out.println(&apos;Elements in the TreeSet after removal:&apos;+numbers); // Get the size of the TreeSet System.out.println(&apos;Size of the TreeSet:&apos;+numbers.size()); // Get the first and last element System.out.println(&apos;First element:&apos;+numbers.first()); System.out.println(&apos;Last element:&apos;+numbers.last()); // Iterate over the TreeSet System.out.println(&apos;Iterating over the TreeSet:&apos;); for (int number:numbers) { System.out.println(number); } } } 

תְפוּקָה:

 Elements in the TreeSet:[1, 2, 4, 5, 8] Does TreeSet contain 4? true Elements in the TreeSet after removal:[1, 4, 5, 8] Size of the TreeSet:4First element:1 Last element:8 Iterating over the TreeSet: 1 4 5 8 

9) מפת עץ:

TreeMap היא מחלקה ב-Java המיישמת את ממשק Map ומספקת מיפוי מפתח-ערך ממוין המבוסס על הסדר הטבעי של המפתחות או השוואה מותאמת אישית.

יתרונות:

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

חסרונות:

    תקרת זיכרון:TreeMap דורש זיכרון נוסף כדי לאחסן את מבנה העץ הפנימי והאובייקטים הקשורים, וכתוצאה מכך שימוש גבוה יותר בזיכרון בהשוואה למבני נתונים פשוטים יותר כמו HashMap.הכנסה ומחיקה איטית יותר:לפעולות הכנסה ומחיקה ב-TreeMap יש מורכבות זמן של O(log n) עקב הצורך בארגון מחדש של העץ, מה שהופך אותן לאיטיות יותר בהשוואה ל-HashMap או LinkedHashMap.ביצועים מוגבלים עבור נתונים לא ממוינים:TreeMap פועלת ביעילות עבור נתונים ממוינים, אך הביצועים שלו עלולים להתדרדר בעת התמודדות עם נתונים לא ממוינים או שינויים תכופים, מכיוון שהיא דורשת שמירה על הסדר הממוין.

פונקציות:

משתמשי הצג mysql
    put(key, value):הוספת זוג מפתח-ערך לתוך TreeMap.להשיג מפתח):מאחזר את הערך המשויך למפתח שצוין.containsKey(מפתח):בודק אם TreeMap מכיל מפתח ספציפי.הסר (מפתח):מסיר את צמד המפתח-ערך המשויך למפתח שצוין.גודל():מחזירה את מספר זוגות המפתח-ערך במפת העץ.סט מפתחות():מחזירה קבוצה של כל המפתחות במפת העץ.ערכים():מחזירה אוסף של כל הערכים במפת העץ.entrySet():מחזירה קבוצה של זוגות מפתח-ערך במפת העץ.

יישום:

שם קובץ: TreeMapExample.java

 import java.util.TreeMap; public class TreeMapExample { public static void main(String[] args) { // Create a TreeMap TreeMap scores=new TreeMap(); // Insert key-value pairs into the TreeMap scores.put(&apos;Alice&apos;,90); scores.put(&apos;Bob&apos;,80); scores.put(&apos;Charlie&apos;,95); scores.put(&apos;David&apos;,87); scores.put(&apos;Eve&apos;,92); //Access and print values from the TreeMap System.out.println(&apos;Score of Alice:&apos;+scores.get(&apos;Alice&apos;)); System.out.println(&apos;Score of Charlie:&apos;+scores.get(&apos;Charlie&apos;)); System.out.println(&apos;Score of David:&apos;+scores.get(&apos;David&apos;)); // Update a value in the TreeMap scores.put(&apos;Bob&apos;,85); // Remove a key-value pair from the TreeMap scores.remove(&apos;Eve&apos;); // Iterate through the TreeMap using a for-each loop System.out.println(&apos;Scores in the TreeMap:&apos;); for (String name:scores.keySet()) { int score=scores.get(name); System.out.println(name+&apos;:&apos;+score); } } } 

תְפוּקָה:

 Score of Alice:90 Score of Charlie:95 Score of David:87 Scores in the TreeMap: Alice:90 Bob:85 Charlie:95 David:87 

10) גרף:

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

יתרונות:

    צדדיות:גרפים יכולים לייצג מגוון רחב של תרחישים בעולם האמיתי, מה שהופך אותם למתאימים ליישומים שונים כגון רשתות חברתיות, מערכות תחבורה ורשתות מחשבים.ייצוג מערכת יחסים:גרפים מספקים דרך טבעית לייצג מערכות יחסים וקשרים בין ישויות, המאפשרות ניתוח ומעבר יעילים של מערכות יחסים אלו.חיפוש ומעבר יעילים:אלגוריתמים של גרפים כמו Breadth-First Search (BFS) ו-depth-first search (DFS) מאפשרים מעבר וחיפוש יעילים של קודקודי הגרף וקצוותיו.דוגמנות מערכות יחסים מורכבות:גרפים יכולים לדגמן קשרים מורכבים, כולל מבנים היררכיים, תלות מחזורית וקשרים מרובים בין ישויות.

חסרונות:

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

יישום:

שם קובץ: GraphExample.java

 import java.util.*; public class GraphExample { private int V; // Number of vertices private List<list> adjacencyList; // Adjacency list representation public GraphExample(int V) { this.V=V; adjacencyList=new ArrayList(V); // Initialize the adjacency list for (int i=0;i<v;i++) { adjacencylist.add(new arraylist()); } function to add an edge between two vertices public void addedge(int source,int destination) adjacencylist.get(source).add(destination); adjacencylist.get(destination).add(source); perform breadth-first search traversal of the graph bfs(int startvertex) boolean[] visited="new" boolean[v]; queue linkedlist(); visited[startvertex]="true;" queue.add(startvertex); while (!queue.isempty()) int currentvertex="queue.poll();" system.out.print(currentvertex+\' \'); list neighbors="adjacencyList.get(currentVertex);" for (int neighbor:neighbors) if (!visited[neighbor]) visited[neighbor]="true;" queue.add(neighbor); system.out.println(); depth-first dfs(int dfsutil(startvertex,visited); private dfsutil(int vertex,boolean[] visited) visited[vertex]="true;" system.out.print(vertex+\' dfsutil(neighbor,visited); static main(string[] args) v="5;" number graphexample graphexample(v); edges graph.addedge(0,1); graph.addedge(0,2); graph.addedge(1,3); graph.addedge(2,3); graph.addedge(2,4); system.out.print(\'bfs traversal: graph.bfs(0); system.out.print(\'dfs graph.dfs(0); < pre> <p> <strong>Output:</strong> </p> <pre> BFS traversal: 0 1 2 3 4 DFS traversal: 0 1 3 2 4 </pre> <h3>11) Tree:</h3> <p>A tree is a widely used data structure in computer science that represents a hierarchical structure. It consists of nodes connected by edges, where each node can have zero or more child nodes.</p> <p> <strong>Advantages:</strong> </p> <ol class="points"> <tr><td>Hierarchical Structure:</td> Trees provide a natural way to represent hierarchical relationships, such as file systems, organization charts, or HTML/XML documents. </tr><tr><td>Efficient Search:</td> Binary search trees enable efficient searching with a time complexity of O(log n), making them suitable for storing and retrieving sorted data. </tr><tr><td>Fast Insertion and Deletion:</td> Tree data structures offer efficient insertion and deletion operations, especially when balanced, such as AVL trees or Red-Black trees. </tr><tr><td>Ordered Iteration:</td> In-order traversal of a binary search tree gives elements in a sorted order, which is helpful for tasks like printing elements in sorted order or finding the next/previous element. </tr></ol> <p> <strong>Disadvantages:</strong> </p> <ol class="points"> <tr><td>High Memory Overhead:</td> Trees require additional memory to store node references or pointers, which can result in higher memory usage compared to linear data structures like arrays or lists. </tr><tr><td>Complex Implementation:</td> Implementing and maintaining a tree data structure can be more complex compared to other data structures like arrays or lists, especially for balanced tree variants. </tr><tr><td>Limited Operations:</td> Some tree variants, like binary search trees, do not support efficient operations like finding the kth smallest element or finding the rank of an element. </tr></ol> <p> <strong>Functions:</strong> </p> <ol class="points"> <tr><td>Insertion:</td> Add a new node to the tree. </tr><tr><td>Deletion:</td> Remove a node from the tree. </tr><tr><td>Search:</td> Find a specific node or element in the tree. </tr><tr><td>Traversal:</td> Traverse the tree in different orders, such as in-order, pre-order, or post-order. </tr><tr><td>Height/Depth:</td> Calculate the height or depth of the tree. </tr><tr><td>Balance:</td> Ensure the tree remains balanced to maintain efficient operations. </tr></ol> <p> <strong>Implementation:</strong> </p> <p> <strong>FileName:</strong> TreeExample.java</p> <pre> import java.util.*; class TreeNode { int value; TreeNode left; TreeNode right; public TreeNode(int value) { this.value = value; left = null; right = null; } } public class TreeExample { public static void main(String[] args) { // Create a binary search tree TreeNode root = new TreeNode(50); root.left = new TreeNode(30); root.right = new TreeNode(70); root.left.left = new TreeNode(20); root.left.right = new TreeNode(40); root.right.left = new TreeNode(60); root.right.right = new TreeNode(80); // Perform common operations System.out.println(&apos;In-order Traversal:&apos;); inOrderTraversal(root); System.out.println(&apos;
Search for value 40: &apos;+search(root, 40)); System.out.println(&apos;Search for value 90: &apos;+search(root, 90)); int minValue = findMinValue(root); System.out.println(&apos;Minimum value in the tree: &apos;+minValue); int maxValue = findMaxValue(root); System.out.println(&apos;Maximum value in the tree: &apos;+maxValue); } // In-order traversal: left subtree, root, right subtree public static void inOrderTraversal(TreeNode node) { if (node != null) { inOrderTraversal(node.left); System.out.print(node.value + &apos; &apos;); inOrderTraversal(node.right); } } // Search for a value in the tree public static boolean search(TreeNode node, int value) { if (node == null) return false; if (node.value == value) return true; if (value <node.value) return search(node.left, value); else search(node.right, } find the minimum value in tree public static int findminvalue(treenode node) { if (node.left="=" null) node.value; findminvalue(node.left); maximum findmaxvalue(treenode (node.right="=" findmaxvalue(node.right); < pre> <p> <strong>Output:</strong> </p> <pre> In-order Traversal:20 30 40 50 60 70 80 Search for value 40: true Search for value 90: false Minimum value in the tree: 20 Maximum value in the tree: 80 </pre> <hr></node.value)></pre></v;i++)></list>

11) עץ:

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

יתרונות:

    מבנה היררכי:עצים מספקים דרך טבעית לייצג קשרים היררכיים, כגון מערכות קבצים, תרשימי ארגון או מסמכי HTML/XML.חיפוש יעיל:עצי חיפוש בינאריים מאפשרים חיפוש יעיל עם מורכבות זמן של O(log n), מה שהופך אותם למתאימים לאחסון ואחזור נתונים ממוינים.הכנסה ומחיקה מהירה:מבני נתונים של עצים מציעים פעולות הכנסה ומחיקה יעילות, במיוחד כשהם מאוזנים, כגון עצי AVL או עצים אדום-שחור.איטרציה מוזמנת:מעבר לפי הסדר של עץ חיפוש בינארי נותן אלמנטים בסדר ממוין, מה שמועיל למשימות כמו הדפסת אלמנטים בסדר ממוין או מציאת האלמנט הבא/הקודם.

חסרונות:

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

פונקציות:

    הַכנָסָה:הוסף צומת חדש לעץ.מְחִיקָה:הסר צומת מהעץ.לחפש:מצא צומת או אלמנט ספציפי בעץ.מעבר:חצו את העץ בסדרים שונים, כגון בהזמנה, בהזמנה מוקדמת או לאחר הזמנה.גובה/עומק:חשב את גובה או עומק העץ.איזון:ודא שהעץ נשאר מאוזן כדי לשמור על פעולות יעילות.

יישום:

שם קובץ: TreeExample.java

 import java.util.*; class TreeNode { int value; TreeNode left; TreeNode right; public TreeNode(int value) { this.value = value; left = null; right = null; } } public class TreeExample { public static void main(String[] args) { // Create a binary search tree TreeNode root = new TreeNode(50); root.left = new TreeNode(30); root.right = new TreeNode(70); root.left.left = new TreeNode(20); root.left.right = new TreeNode(40); root.right.left = new TreeNode(60); root.right.right = new TreeNode(80); // Perform common operations System.out.println(&apos;In-order Traversal:&apos;); inOrderTraversal(root); System.out.println(&apos;
Search for value 40: &apos;+search(root, 40)); System.out.println(&apos;Search for value 90: &apos;+search(root, 90)); int minValue = findMinValue(root); System.out.println(&apos;Minimum value in the tree: &apos;+minValue); int maxValue = findMaxValue(root); System.out.println(&apos;Maximum value in the tree: &apos;+maxValue); } // In-order traversal: left subtree, root, right subtree public static void inOrderTraversal(TreeNode node) { if (node != null) { inOrderTraversal(node.left); System.out.print(node.value + &apos; &apos;); inOrderTraversal(node.right); } } // Search for a value in the tree public static boolean search(TreeNode node, int value) { if (node == null) return false; if (node.value == value) return true; if (value <node.value) return search(node.left, value); else search(node.right, } find the minimum value in tree public static int findminvalue(treenode node) { if (node.left="=" null) node.value; findminvalue(node.left); maximum findmaxvalue(treenode (node.right="=" findmaxvalue(node.right); < pre> <p> <strong>Output:</strong> </p> <pre> In-order Traversal:20 30 40 50 60 70 80 Search for value 40: true Search for value 90: false Minimum value in the tree: 20 Maximum value in the tree: 80 </pre> <hr></node.value)>