logo

Datenstrukturen in Java

Die zahlreichen Möglichkeiten, wie Daten in einem Computerprogramm angeordnet, gespeichert und verarbeitet werden können, werden in Java als Datenstrukturen bezeichnet. Diese Strukturen bieten eine methodische Methode zur effektiven Handhabung und Verwaltung von Daten und ermöglichen nützliche Vorgänge wie Einfügen, Löschen, Abrufen und Durchlaufen.

Der Artikel befasst sich mit allem, was mit den Datenstrukturen in Java zu tun hat, und hilft Anfängern, sie einfach und effektiv zu verstehen.

  • Was ist java?
  • Was sind Datenstrukturen in Java?
  • Arten von Datenstrukturen in Java
  • Vorteile von Datenstrukturen in Java
  • Klassifizierung von Datenstrukturen
  • Häufig gestellte Fragen zu Datenstrukturen in Java

Was ist java?

Java ist eine beliebte objektorientierte Programmiersprache, die für ihre umfangreiche Standardbibliothek und Plattformfreiheit bekannt ist. Es bietet eine solide Architektur zum Erstellen von Programmen, die ohne Neukompilierung auf verschiedenen Plattformen ausgeführt werden können. Die bekannte Bibliothek für Java verfügt über eine Auswahl an Dateisystemen, die den effizienten Umgang mit zahlreichen Datentypen ermöglichen.

Was sind Datenstrukturen in Java?

Die Art und Weise, wie Daten im Speicher eines Computerprogramms organisiert und gespeichert werden, hängt eng von den Java-Datensatzstrukturen ab. Die bekannte Java-Bibliothek enthält eine Reihe integrierter Statistikstrukturen. Zu den Aufzeichnungssystemen, die Programmierern kurze und einfache Möglichkeiten zum Speichern und Anordnen von Daten bieten, gehören verbundene Listen, Stapel, Warteschlangen und Arrays. Entwickler können Vorgänge wie Einfügen, Löschen, Suchen und Sortieren schnell durchführen, da sie eine Reihe von Mechanismen für den Zugriff auf, die Änderung und die Verwaltung von Daten bereitstellen. Java-Programmierer können durch die Verwendung dieser Datenstrukturen den Speicherverbrauch reduzieren und die Gesamteffizienz ihrer Programme erheblich steigern.

Arten von Datenstrukturen in Java

Die Liste der Datenstrukturen in Java ist unten aufgeführt

  1. Arrays
  2. Anordnungsliste
  3. LinkedList
  4. Stapel
  5. Warteschlange
  6. HashMap
  7. HashSet
  8. TreeSet
  9. TreeMap
  10. Graph
  11. Baum

Das folgende Diagramm erklärt die Arten von Datenstrukturen in Java sehr deutlich.

Datenstrukturen in Java

Weitere Klassifizierung der Arten von Datenstrukturen:

Es gibt zwei Arten von Datenstrukturen: -

  1. Primitive Datenstrukturen
  2. Nicht-primitive Datenstrukturen

1) Primitive Datenstrukturen: Auch als primitive Datentypen bekannt, handelt es sich hierbei um grundlegende integrierte Datentypen in Java. Sie beinhalten:

    Byte:Speichert ganze Zahlen von -128 bis 127.kurz:Speichert ganze Zahlen von -32.768 bis 32.767.int:Speichert ganze Zahlen von -2.147.483.648 bis 2.147.483.647.schweben:Speichert Gleitkommazahlen mit einfacher Genauigkeit.verkohlen:Speichert einzelne Zeichen.Boolescher Wert:Speichert wahre oder falsche Werte.lang:Speichert große ganze Zahlen.Doppelt:Speichert Gleitkommazahlen mit doppelter Genauigkeit.

2) Nicht-primitive Datenstrukturen: Nicht-primitive Datensatzstrukturen sind komplexer und bestehen aus primitiven Informationssortierungen. Sie können außerdem in zwei Arten eingeteilt werden:

    Lineare Datenstrukturen:In linearen Datenstrukturen sind die Elemente linear oder sequentiell angeordnet. Beispiele beinhalten:
      Arrays:Eine Gruppe identisch typisierter Elemente, die gemäß einer vorgegebenen Anordnung in einem Array angeordnet sind.Stapel:Eine Last-In-First-Out (LIFO)-Struktur, bei der nur die obersten Elemente hinzugefügt oder entfernt werden dürfen.Schwänze:FIFO-Strukturen (First-In-First-Out) werden in Warteschlangen verwendet, bei denen Artikel auf der Rückgabeseite eingelegt und auf der Vorderseite entnommen werden.Verlinkte Liste:Eine Themenliste besteht aus einer Sammlung von Gadgets, die als Knoten bezeichnet werden und von denen jedes einen Verweis auf den Knoten dahinter und darin enthaltene Statistiken enthält.
    Nichtlineare Datenstrukturen:In nichtlinearen Datenstrukturen sind die Elemente nicht sequentiell angeordnet. Beispiele beinhalten:
      Bäume:Bäume sind eine Art knotenbasierte hierarchische Struktur mit einem Wurzelknoten an der Spitze und davon ausgehenden untergeordneten Knoten. Beispiele hierfür sind Rot-Schwarz-Bäume, AVL-Bäume, binäre Suchbäume und binäre Bäume.Grafiken:Eine Menge von Knoten, die über Kanten verbunden sind, wobei die Knoten eine beliebige Anzahl von Verbindungen haben können. Diagramme werden verwendet, um komplexe Beziehungen zwischen Elementen zu symbolisieren.Haufen:Eine spezielle baumbasierte Struktur, in der jeder bestimmte Knoten einen Wert hat, der größer oder kleiner als seine untergeordneten Knoten ist, abhängig davon, ob es sich um einen Max-Heap oder einen Min-Heap handelt.Hash:Datenstrukturen, die eine Hash-Funktion verwenden, um Schlüssel Werten zuzuordnen. Beispiele hierfür sind Hash-Sets und Hash-Maps, die einen grünen Abruf und die Speicherung von Statistiken auf der Grundlage präziser Schlüssel ermöglichen.
Datenstrukturen in Java

Vorteile von Datenstrukturen in Java

    Effiziente Datenorganisation:Datenstrukturen bieten organisierte Möglichkeiten zum Speichern und Verwalten von Daten und ermöglichen effiziente Zugriffs-, Manipulations- und Abrufvorgänge. Sie optimieren die Speichernutzung und ermöglichen eine schnellere Ausführung von Algorithmen.Bessere Leistung:Entwickler können die Leistung hinsichtlich Geschwindigkeit und Speichernutzung verbessern, indem sie die geeignete Datenstruktur für eine bestimmte Aktivität auswählen. Die Leistung wird optimiert, da bestimmte Datenstrukturen so gestaltet sind, dass sie sich bei bestimmten Aktionen wie Suchen, Sortieren oder Einfügen von Informationen auszeichnen.Wiederverwendbarkeit des Codes:Java bietet eine breite Palette integrierter Datenstrukturen, die für Programmierer einfach zu verwenden sind. Diese wiederverwendbaren Datenstrukturen sparen Zeit und Aufwand, da keine anspruchsvollen Algorithmen mehr erstellt werden müssen.Einfachheit des Codes:Datenstrukturen erleichtern die Codeimplementierung komplizierter Prozesse. Sie bieten Abstraktionen auf hoher Ebene und kapseln die Besonderheiten der Datenverwaltung, was die Lesbarkeit, Wartbarkeit und Klarheit des Codes verbessert.Flexibilität und Anpassungsfähigkeit:Datenstrukturen bieten Flexibilität beim Umgang mit unterschiedlichen Datentypen und -größen. Sie können sich dynamisch an veränderte Datenanforderungen anpassen und bieten Mechanismen für eine effiziente Datenbearbeitung.Standardisiert und bewährt:Die Standardbibliothek für Java enthält integrierte Datenstrukturen, die umfangreichen Tests und Optimierungen unterzogen wurden, um ihre Zuverlässigkeit und Leistung zu gewährleisten. Durch die Verwendung dieser gemeinsamen Datenstrukturen wird die Fehlerwahrscheinlichkeit verringert und die Anwendungsentwicklung auf eine solide Grundlage gestellt.Skalierbarkeit:Datenstrukturen bieten Skalierbarkeitsoptionen, sodass Anwendungen große Datenmengen effizient verarbeiten können. Sie können je nach Datengröße dynamisch wachsen oder schrumpfen und sorgen so auch bei steigenden Datenanforderungen für optimale Leistung.Algorithmus-Design:Datenstrukturen sind für das Design und die Analyse von Algorithmen von entscheidender Bedeutung. Sie stellen die zugrunde liegende Struktur und die Operationen bereit, die für die Implementierung verschiedener Algorithmen und die Lösung komplexer Probleme erforderlich sind.

1) Arrays:

Ein Array ist eine grundlegende und häufig verwendete Datenstruktur im Kontext der Datenstrukturen von Java. Es bietet eine Methode zum Speichern einer Sammlung fester Größe identischer Komponententypen. Da sie abhängig von ihrem Index einen schnellen und einfachen Zugriff auf Elemente ermöglichen, sind Arrays ein wichtiges Werkzeug für die Verwaltung und Organisation von Daten.

Vorteile:

    Datenorganisation:Arrays bieten eine strukturierte Möglichkeit zum Speichern und Organisieren von Elementen und verbessern so die Datenverwaltung.Direktzugriff:Auf Elemente kann direkt über ihren Index zugegriffen werden, was ein effizientes Abrufen und Ändern ermöglicht.Feste Größe:Arrays haben eine vorgegebene Größe, was eine effiziente Speicherzuweisung ermöglicht.Homogene Elemente:Arrays speichern Elemente desselben Typs, wodurch die Datenkonsistenz gewährleistet und Vorgänge vereinfacht werden.Wiederholung:Arrays unterstützen die einfache Iteration durch Elemente und erleichtern so das Durchlaufen und Verarbeiten.Sortieren und Suchen:Arrays funktionieren gut mit Sortier- und Suchalgorithmen und bieten effiziente Abläufe.Speichereffizienz:Arrays optimieren die Speichernutzung, indem sie Elemente in zusammenhängenden Regionen speichern.Kompatibilität:Arrays werden in Java weitgehend unterstützt, sodass sie mit verschiedenen Frameworks und Tools kompatibel sind.

Nachteile:

    Feste Größe:Die Größe von Arrays kann nicht dynamisch geändert werden, sodass bei Größenänderungen eine Neuerstellung erforderlich ist.Speicherverschwendung:Nicht verwendete Elemente in größeren Arrays können zu Speicherverschwendung führen.Overhead beim Einfügen und Löschen:Das Einfügen oder Löschen von Elementen in der Mitte eines Arrays erfordert das Verschieben nachfolgender Elemente, was zu Ineffizienz führt.Mangelnde Flexibilität:Arrays haben starre Datentypen und können ohne zusätzliche Arrays oder Datenstrukturen keine unterschiedlichen Datentypen aufnehmen.

Funktionen:

    Erstellen eines Arrays:Deklarieren und initialisieren Sie ein Array mit einer bestimmten Größe mithilfe des Array-Typs und des Schlüsselworts new.Auf Elemente zugreifen:Verwenden Sie den Index, um auf einzelne Elemente im Array zuzugreifen.Elemente ändern:Aktualisieren Sie den Wert eines Elements, indem Sie einem bestimmten Index im Array einen neuen Wert zuweisen.Länge finden:Verwenden Sie das Längenattribut, um die Länge des Arrays zu bestimmen.Durchlaufen des Arrays:Verwenden Sie Schleifen, um jedes Element im Array zu durchlaufen und auszuführen

Implementierung:

Dateiname: 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 in Java ist eine dynamische Datenstruktur, die die Speicherung und Bearbeitung von Elementen ermöglicht. Es ist Teil des Java Collections Framework und wird intern mithilfe eines Arrays implementiert.

Vorteile:

    Dynamische Größe:Im Gegensatz zu Arrays können ArrayLists dynamisch vergrößert oder verkleinert werden, wenn Elemente hinzugefügt oder entfernt werden. Es macht eine manuelle Größenänderung überflüssig und ermöglicht die bequeme Handhabung unterschiedlicher Datenmengen.Einfache Elementmanipulation:ArrayLists bieten Methoden zum Hinzufügen, Entfernen und Ändern von Elementen an jeder Position innerhalb der Liste. Seine Flexibilität vereinfacht gängige Vorgänge wie Einfügen, Löschen und Aktualisieren und macht die Elementmanipulation effizienter.Direktzugriff:ArrayLists unterstützen den wahlfreien Zugriff auf Elemente mithilfe ihres Index und ermöglichen so das schnelle Abrufen und Ändern von Elementen an bestimmten Positionen innerhalb der Liste. Es erleichtert den effizienten Elementzugriff und verbessert die Gesamtleistung.Kompatibilität mit Java Collection Framework:ArrayLists implementieren die List-Schnittstelle und machen sie so mit anderen Collection-Klassen im Java Collections Framework kompatibel. Seine Kompatibilität ermöglicht eine nahtlose Integration mit verschiedenen Algorithmen und Operationen, die vom Framework bereitgestellt werden.

Nachteile:

    Höherer Speicheraufwand:ArrayLists benötigen zusätzlichen Speicher, um ihre interne Struktur beizubehalten, was im Vergleich zu Arrays zu einem höheren Speicheraufwand führt. Dies kann beim Umgang mit großen Elementsammlungen ein Problem darstellen.Langsameres Einfügen und Löschen:Das Einfügen oder Löschen von Elementen in der Mitte einer ArrayList erfordert das Verschieben von Elementen, was bei großen Listen zeitaufwändig sein kann. In Szenarien, in denen häufige Einfüge- oder Löschvorgänge zu erwarten sind, bieten andere Datenstrukturen wie LinkedList möglicherweise eine bessere Leistung.Eingeschränkte Leistung für die Suche:Die Suche nach einem Element in einer unsortierten ArrayList erfordert das Durchlaufen der Elemente, bis eine Übereinstimmung gefunden wird. Es handelt sich um einen linearen Suchansatz, der im Vergleich zu für die Suche optimierten Datenstrukturen wie HashSet oder TreeMap zu einer langsameren Suchleistung führt.Keine Unterstützung für primitive Typen:ArrayLists können nur Objekte speichern und unterstützen primitive Datentypen wie int oder char nicht direkt. Um primitive Typen zu speichern, müssen Wrapper-Klassen wie Integer oder Character verwendet werden, was zu einem potenziellen Mehraufwand beim Autoboxing und Unboxing führen kann.

Funktionen:

in.next Java
    Erstellen einer ArrayList:Deklarieren und initialisieren Sie eine ArrayList mithilfe der ArrayList-Klasse und geben Sie den Elementtyp in spitzen Klammern an.Elemente hinzufügen:Verwenden Sie die Add-Methode, um Elemente am Ende der ArrayList anzuhängen.Auf Elemente zugreifen:Verwenden Sie die Get-Technik, um den Detailpreis für einen ausgewählten Index abzurufen.Elemente ändern:Aktualisieren Sie die Detailkosten an einem bestimmten Index für die Verwendung des Set-Ansatzes.Finden der Größe:Verwenden Sie die Dimensionsmethode, um die aktuelle Anzahl von Faktoren in der ArrayList zu erhalten.Elemente entfernen:Verwenden Sie den Remove-Ansatz, um ein Detail an einem bestimmten Index oder durch Bereitstellung der Objektreferenz zu löschen.Durchlaufen der ArrayList:Verwenden Sie Schleifen, um jedes Element in der ArrayList zu durchlaufen und Operationen daran auszuführen.

Implementierung:

Dateiname: 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); } } } 

Ausgabe:

 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) Verlinkte Liste:

Eine verknüpfte Liste ist eine lineare Datenstruktur, in der Elemente in separaten Objekten, sogenannten Knoten, gespeichert sind. Im Datenelement jedes Knotens ist ein Referenzlink zum folgenden Knoten in der Sequenz enthalten. Der letzte Knoten der Liste ist mit Null verknüpft, was anzeigt, dass die Liste beendet ist.

Im Gegensatz zu Arrays erfordern verknüpfte Listen keine zusammenhängende Speicherzuweisung. Jeder Knoten in einer verknüpften Liste kann unabhängig zugewiesen werden, was eine dynamische Speicherzuweisung und effiziente Einfüge- und Löschvorgänge ermöglicht.

Vorteile:

Speicheraustausch
    Dynamische Größe:LinkedList kann dynamisch wachsen oder schrumpfen und eignet sich daher für unterschiedliche oder unbekannte Datengrößen.Effizientes Einfügen und Löschen:Das Einfügen oder Löschen von Elementen innerhalb einer LinkedList ist effizient, da keine Elemente verschoben werden müssen.Keine zusammenhängende Speicheranforderung:LinkedList benötigt keine zusammenhängende Speicherzuweisung, wodurch es flexibel und für unvorhersehbare Speichersituationen geeignet ist.Einfache Änderung:LinkedList ermöglicht die einfache Änderung von Elementen durch Ändern von Referenzzeigern und ermöglicht so eine effiziente Manipulation.

Nachteile:

    Langsamerer Direktzugriff:LinkedList verfügt über einen langsameren Direktzugriff, da die Liste durchlaufen werden muss, um über den Index auf Elemente zuzugreifen.Erhöhter Speicheraufwand:LinkedList erfordert zusätzlichen Speicher für Referenzen und Knoten, was den Speicheraufwand im Vergleich zu Arrays erhöht.Ineffiziente Suche:LinkedList verfügt über langsamere Suchvorgänge und erfordert eine sequentielle Iteration, um bestimmte Elemente zu finden.

Funktionen:

    Erstellen einer LinkedList:Deklarieren und initialisieren Sie eine LinkedList mithilfe der LinkedList-Klasse.Elemente hinzufügen:Verwenden Sie die Add-Methode, um Elemente am Ende der LinkedList anzuhängen.Auf Elemente zugreifen:Verwenden Sie die get-Methode, um den Wert eines Elements an einem bestimmten Index abzurufen.Elemente ändern:Aktualisieren Sie den Wert eines Elements an einem bestimmten Index mithilfe der Set-Methode.Elemente entfernen:Verwenden Sie die Remove-Methode, um ein Element an einem bestimmten Index oder durch Bereitstellung der Objektreferenz zu löschen.

Implementierung:

Dateiname: 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); } } 

Ausgabe:

 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) Stapel:

Das Last-In-First-Out-Prinzip (LIFO) schreibt vor, dass das zuletzt eingefügte Element auch das Element ist, das zuerst entfernt wird. Ein Stapel ist eine lineare Datenstruktur, die dieser Regel folgt. Es verwendet die Befehle „push“ und „pop“, um Elemente zum Stapel hinzuzufügen und dementsprechend das oberste Element vom Stapel zu entfernen. Die „Peek“-Technik ermöglicht zusätzlich den Zugriff auf das obere Element, ohne es zu entfernen.

Merkmale eines Stapels:

    LIFO-Verhalten:Das letzte Element, das auf den Stapel geschoben wird, ist das erste, das herausspringt. Daher eignet es sich für Anwendungen, bei denen die Reihenfolge des Einsetzens und Entfernens wichtig ist.Beschränkter Zugang:Stapel bieten normalerweise eingeschränkten Zugriff auf Elemente. Sie können nur auf das oberste Element zugreifen. Um andere Elemente zu erreichen, müssen Sie die darüber liegenden Elemente einblenden.Dynamische Größe:Stapel können mithilfe von Arrays oder verknüpften Listen implementiert werden, was eine dynamische Größe ermöglicht. Sie können zur Laufzeit je nach Bedarf wachsen oder schrumpfen.

Vorteile:

    Einfachheit:Stacks sind leicht zu verstehen und zu implementieren.Effizienz:Einfüge- und Löschvorgänge haben eine zeitliche Komplexität von O(1).Funktionsaufrufverwaltung:Stacks verwalten Funktionsaufrufe und Variablenspeicher effizient.Funktion „Rückgängig/Wiederherstellen“:Stapel ermöglichen das Rückgängigmachen und Wiederherstellen von Vorgängen in Anwendungen.

Nachteile:

    Beschränkter Zugang:Der Zugriff auf Elemente ist auf die Oberseite des Stapels beschränkt.Größenbeschränkungen:Abhängig von der Implementierung können für Stacks Größenbeschränkungen gelten.Nicht für alle Szenarien geeignet:Stapel sind spezifisch für das LIFO-Verhalten und in anderen Fällen möglicherweise nicht geeignet.

Implementierung:

Dateiname: 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); } } } 

Ausgabe:

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

5) Warteschlange:

Eine Warteschlange ist eine lineare Datenstruktur in Java, die dem First-In-First-Out (FIFO)-Prinzip folgt. Es stellt eine Sammlung von Elementen dar, bei der Elemente hinten eingefügt und vorne entfernt werden.

Merkmale:

    In die Warteschlange stellen:Hinzufügen eines Elements am Ende der Warteschlange.Aus der Warteschlange entfernen:Entfernen eines Elements vom Anfang der Warteschlange.Spähen:Rufen Sie das Element am Anfang der Warteschlange ab, ohne es zu entfernen.Größe:Bestimmen der Anzahl der Elemente in der Warteschlange.Leerer Check:Überprüfen, ob die Warteschlange leer ist.

Vorteile:

    FIFO-Verhalten:Elemente werden in der Reihenfolge ihrer Einfügung verarbeitet, wodurch die Beibehaltung der ursprünglichen Reihenfolge gewährleistet wird.Effizientes Einsetzen und Entfernen:Das Hinzufügen und Entfernen von Elementen aus einer Warteschlange erfolgt schnell und weist eine konstante Zeitkomplexität von O(1) auf.Synchronisation:Java bietet synchronisierte Warteschlangenimplementierungen, wodurch sie für die gleichzeitige Programmierung sicher sind.Standardisierte Schnittstelle:Die Queue-Schnittstelle in Java bietet einen gemeinsamen Satz von Methoden, die eine einfache Austauschbarkeit zwischen verschiedenen Queue-Implementierungen ermöglichen.

Nachteile:

    Kein wahlfreier Zugriff:Warteschlangen unterstützen keinen direkten Zugriff auf Elemente in der Mitte. Um auf bestimmte Positionen zuzugreifen, müssen vorhergehende Elemente aus der Warteschlange entfernt werden.Begrenzte Größe:Einige Warteschlangenimplementierungen haben eine feste Größe oder Kapazität, was zu einem Überlauf oder Ausnahmen führt, wenn die maximale Größe überschritten wird.Ineffiziente Suche:Die Suche nach einem Element in einer Warteschlange erfordert das Entfernen aus der Warteschlange, bis eine Übereinstimmung gefunden wird, was zu einer linearen Suche mit möglicherweise hoher zeitlicher Komplexität führt.

Implementierung:

Dateiname: 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); } } } 

Ausgabe:

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

6) HashMap:

Eine HashMap ist eine Datenstruktur in Java, die eine Möglichkeit zum Speichern und Abrufen von Schlüssel-Wert-Paaren bietet. Es ist Teil des Java Collections Framework und wird basierend auf der Hash-Tabellen-Datenstruktur implementiert.

Funktionen:

    put(Schlüssel, Wert):Fügt das angegebene Schlüssel-Wert-Paar in die HashMap ein.get(key):Ruft den Wert ab, der dem angegebenen Schlüssel zugeordnet ist.enthältSchlüssel(Schlüssel):Prüft, ob die HashMap den angegebenen Schlüssel enthält.enthältWert(Wert):Prüft, ob die HashMap den angegebenen Wert enthält.entfernen(Schlüssel):Entfernt das mit dem angegebenen Schlüssel verknüpfte Schlüssel-Wert-Paar aus der HashMap.Größe():Gibt die Anzahl der Schlüssel-Wert-Paare in der HashMap zurück.ist leer():Überprüft, ob die HashMap leer ist.Schlüsselsatz():Gibt einen Satz zurück, der alle Schlüssel in der HashMap enthält.Werte():Gibt eine Sammlung zurück, die alle Werte in der HashMap enthält.klar():Entfernt alle Schlüssel-Wert-Paare aus der HashMap.

Vorteile:

    Effizienter Abruf:HashMap bietet einen schnellen Abruf von Werten basierend auf Schlüsseln mit der Komplexität O(1) mit konstanter Zeit.Flexible Schlüssel-Wert-Paarung:HashMap lässt jedes Nicht-Null-Objekt als Schlüssel zu und ermöglicht so benutzerdefinierte Schlüssel zum Speichern und Abrufen von Daten.Dynamische Größe:HashMap kann dynamisch vergrößert oder verkleinert werden, um unterschiedliche Datenmengen zu verarbeiten.Kompatibilität mit Java Collections Framework:HashMap implementiert die Map-Schnittstelle und ermöglicht so eine nahtlose Integration mit anderen Collection-Klassen.

Nachteile:

    Mangelnde Bestellung:HashMap behält die Reihenfolge der Elemente nicht bei. Verwenden Sie LinkedHashMap oder TreeMap für spezifische Bestellanforderungen.Erhöhter Speicheraufwand:HashMap erfordert im Vergleich zu einfacheren Datenstrukturen zusätzlichen Speicher für Hash-Codes und interne Strukturen.Langsamere Iteration:Die Iteration über eine HashMap kann im Vergleich zu Arrays oder Listen langsamer sein, da die zugrunde liegende Hash-Tabelle durchlaufen wird.

Implementierung:

Dateiname: 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()); } } 

Ausgabe:

 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 ist eine Datenstruktur in Java, die die Set-Schnittstelle implementiert und Elemente in einer Hash-Tabelle speichert.

Merkmale:

    Speichert einzigartige Elemente:HashSet erlaubt keine doppelten Elemente. Jedes Element im HashSet ist einzigartig.Verwendet Hash-basierte Suche:HashSet verwendet den Hash-Wert jedes Elements, um seinen Speicherort zu bestimmen und so einen effizienten Elementabruf zu ermöglichen.Ungeordnete Sammlung:Die Elemente in einem HashSet werden nicht in einer bestimmten Reihenfolge gespeichert. Die Reihenfolge der Elemente kann sich im Laufe der Zeit ändern.

Vorteile:

    Schnelle Elementsuche:HashSet bietet schnelle Suchvorgänge und ermöglicht so die effiziente Überprüfung, ob ein Element in der Menge vorhanden ist.Keine doppelten Elemente:HashSet verarbeitet automatisch doppelte Elemente und stellt sicher, dass jedes Element einzigartig ist.Integration mit Java Collections Framework:HashSet implementiert die Set-Schnittstelle und macht sie damit mit anderen Sammlungsklassen im Java Collections Framework kompatibel.

Nachteile:

abstrakte Methoden
    Keine garantierte Bestellung:HashSet behält die Reihenfolge der Elemente nicht bei. Wenn die Reihenfolge der Elemente wichtig ist, ist HashSet nicht geeignet.Keine Indizierung:HashSet bietet keine direkte Indizierung oder Positionszugriff auf Elemente. Um auf Elemente zuzugreifen, müssen Sie die Menge durchlaufen.Höherer Speicheraufwand:HashSet benötigt zusätzlichen Speicher zum Speichern von Hash-Werten und zum Verwalten der Hash-Tabellenstruktur, was im Vergleich zu einigen anderen Datenstrukturen zu einer höheren Speichernutzung führt.

Implementierung:

Dateiname: 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()); } } 

Ausgabe:

 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 ist eine Implementierung der SortedSet-Schnittstelle in Java, die einen selbstausgleichenden binären Suchbaum namens Rot-Schwarz-Baum verwendet, um Elemente in sortierter Reihenfolge zu speichern.

Vorteile:

    Sortierte Reihenfolge:TreeSet verwaltet die Elemente automatisch in einer sortierten Reihenfolge basierend auf ihrer natürlichen Reihenfolge oder einem benutzerdefinierten Komparator. Es ermöglicht ein effizientes Suchen und Abrufen von Elementen in aufsteigender oder absteigender Reihenfolge.Keine doppelten Elemente:TreeSet erlaubt keine doppelten Elemente. Es stellt sicher, dass jedes Element im Satz eindeutig ist, was in Szenarien nützlich sein kann, in denen doppelte Werte vermieden werden sollten.Effizienter Betrieb:TreeSet bietet effiziente Vorgänge wie Einfügen, Löschen und Suchen. Diese Operationen haben eine zeitliche Komplexität von O(log n), wobei n die Anzahl der Elemente in der Menge ist.Navigierbare Mengenoperationen:TreeSet bietet zusätzliche Navigationsmethoden wie „higher()“, „lower()“, „decke()“ und „floor()“, mit denen Sie Elemente finden können, die größer, kleiner oder gleich einem bestimmten Wert sind.

Nachteile:

    Gemeinkosten:TreeSet benötigt zusätzlichen Speicher zum Speichern der internen Datenstruktur, was im Vergleich zu anderen Set-Implementierungen zu einem höheren Speicheraufwand führen kann.Langsameres Einführen und Entfernen:Einfügungs- und Entfernungsvorgänge in TreeSet erfordern die Beibehaltung der sortierten Reihenfolge der Elemente, was möglicherweise eine Umstrukturierung des Baums erfordert. Dadurch können diese Vorgänge im Vergleich zu HashSet oder LinkedHashSet etwas langsamer werden.Begrenzte Anpassung:TreeSet ist in erster Linie für die natürliche Ordnung oder einen einzelnen benutzerdefinierten Komparator konzipiert. Möglicherweise ist mehr Flexibilität für mehrere Sortierkriterien oder eine komplexe Sortierlogik erforderlich.

Funktionen:

    hinzufügen(Element):Fügt dem TreeSet ein Element hinzu und behält dabei die sortierte Reihenfolge bei.entfernen(Element):Entfernt das angegebene Element aus dem TreeSet.enthält(Element):Überprüft, ob das TreeSet das angegebene Element enthält.Größe():Gibt die Anzahl der Elemente im TreeSet zurück.Erste():Gibt das erste (unterste) Element im TreeSet zurück.zuletzt():Gibt das letzte (höchste) Element im TreeSet zurück.höher(Element):Gibt das kleinste Element im TreeSet zurück, das unbedingt größer als das angegebene Element ist.unteres(Element):Gibt das größte Element im TreeSet zurück, das unbedingt kleiner als das angegebene Element ist.

Implementierung:

Dateiname: 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); } } } 

Ausgabe:

 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) Baumkarte:

TreeMap ist eine Klasse in Java, die die Map-Schnittstelle implementiert und eine sortierte Schlüsselwertzuordnung basierend auf der natürlichen Reihenfolge der Schlüssel oder einem benutzerdefinierten Komparator bereitstellt.

Seriell in Postgres

Vorteile:

    Sortierte Bestellung:TreeMap verwaltet die Schlüssel in sortierter Reihenfolge, was eine effiziente Suche, Abfrage und bereichsbasierte Vorgänge ermöglicht.Schlüsselwertzuordnung:TreeMap speichert Schlüssel-Wert-Paare und ermöglicht so ein effizientes Suchen und Abrufen von Werten basierend auf den zugehörigen Schlüsseln.Rot-Schwarz-Baum-Implementierung:TreeMap verwendet intern einen ausgewogenen binären Suchbaum (Rot-Schwarz-Baum), der eine effiziente Leistung auch bei großen Datensätzen gewährleistet.Unterstützung für benutzerdefinierte Komparatoren:TreeMap ermöglicht die Verwendung benutzerdefinierter Komparatoren zum Definieren der Sortierreihenfolge der Schlüssel und bietet so Flexibilität bei den Sortierkriterien.

Nachteile:

    Speicheraufwand:TreeMap benötigt zusätzlichen Speicher zum Speichern der internen Baumstruktur und der zugehörigen Objekte, was im Vergleich zu einfacheren Datenstrukturen wie HashMap zu einer höheren Speichernutzung führt.Langsameres Einfügen und Löschen:Einfügungs- und Löschvorgänge in TreeMap haben aufgrund der Notwendigkeit einer Baumumstrukturierung eine zeitliche Komplexität von O(log n), was sie im Vergleich zu HashMap oder LinkedHashMap langsamer macht.Eingeschränkte Leistung für unsortierte Daten:TreeMap ist bei sortierten Daten effizient, die Leistung kann sich jedoch verschlechtern, wenn wir unsortierte Daten oder häufige Änderungen verarbeiten, da die sortierte Reihenfolge beibehalten werden muss.

Funktionen:

    put(Schlüssel, Wert):Fügt ein Schlüssel-Wert-Paar in die TreeMap ein.get(key):Ruft den Wert ab, der dem angegebenen Schlüssel zugeordnet ist.enthältSchlüssel(Schlüssel):Überprüft, ob die TreeMap einen bestimmten Schlüssel enthält.entfernen(Schlüssel):Entfernt das mit dem angegebenen Schlüssel verknüpfte Schlüssel-Wert-Paar.Größe():Gibt die Anzahl der Schlüssel-Wert-Paare in der TreeMap zurück.Schlüsselsatz():Gibt einen Satz aller Schlüssel in der TreeMap zurück.Werte():Gibt eine Sammlung aller Werte in der TreeMap zurück.EintragSet():Gibt eine Reihe von Schlüssel-Wert-Paaren in der TreeMap zurück.

Implementierung:

Dateiname: 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); } } } 

Ausgabe:

 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) Grafik:

Diagramme sind Datenstrukturen, die eine Sammlung miteinander verbundener Knoten oder Eckpunkte darstellen. Sie bestehen aus Scheitelpunkten und Kanten, wobei Scheitelpunkte Entitäten darstellen und Kanten die Beziehungen zwischen diesen Entitäten darstellen.

Vorteile:

    Vielseitigkeit:Diagramme können ein breites Spektrum realer Szenarien darstellen und eignen sich daher für verschiedene Anwendungen wie soziale Netzwerke, Transportsysteme und Computernetzwerke.Beziehungsdarstellung:Diagramme bieten eine natürliche Möglichkeit, Beziehungen und Verbindungen zwischen Entitäten darzustellen und ermöglichen eine effiziente Analyse und Durchquerung dieser Beziehungen.Effiziente Suche und Durchquerung:Diagrammalgorithmen wie die Breitensuche (BFS) und die Tiefensuche (DFS) ermöglichen eine effiziente Durchquerung und Suche der Eckpunkte und Kanten des Diagramms.Modellierung komplexer Zusammenhänge:Diagramme können komplexe Beziehungen modellieren, einschließlich hierarchischer Strukturen, zyklischer Abhängigkeiten und mehrfacher Verbindungen zwischen Entitäten.

Nachteile:

    Raumkomplexität:Diagramme können viel Speicher beanspruchen, insbesondere große Diagramme mit vielen Eckpunkten und Kanten.Die Komplexität der Operationen:Bestimmte Diagrammoperationen, beispielsweise das Finden des kürzesten Pfads oder das Erkennen von Zyklen, können eine hohe zeitliche Komplexität aufweisen, insbesondere in dichten Diagrammen.Schwierigkeiten bei der Wartung:Das Ändern oder Aktualisieren eines Diagramms kann komplex sein, da Änderungen in der Struktur des Diagramms Auswirkungen auf seine Konnektivität und vorhandene Algorithmen haben können.

Implementierung:

Dateiname: 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) Baum:

Ein Baum ist eine in der Informatik weit verbreitete Datenstruktur, die eine hierarchische Struktur darstellt. Es besteht aus Knoten, die durch Kanten verbunden sind, wobei jeder Knoten null oder mehr untergeordnete Knoten haben kann.

Vorteile:

    Hierarchische Struktur:Bäume bieten eine natürliche Möglichkeit, hierarchische Beziehungen wie Dateisysteme, Organigramme oder HTML/XML-Dokumente darzustellen.Effiziente Suche:Binäre Suchbäume ermöglichen eine effiziente Suche mit einer Zeitkomplexität von O(log n) und eignen sich daher zum Speichern und Abrufen sortierter Daten.Schnelles Einfügen und Löschen:Baumdatenstrukturen bieten effiziente Einfüge- und Löschvorgänge, insbesondere wenn sie ausgeglichen sind, wie etwa AVL-Bäume oder Rot-Schwarz-Bäume.Geordnete Iteration:Das Durchlaufen eines binären Suchbaums in der richtigen Reihenfolge liefert Elemente in einer sortierten Reihenfolge, was für Aufgaben wie das Drucken von Elementen in sortierter Reihenfolge oder das Suchen des nächsten/vorherigen Elements hilfreich ist.

Nachteile:

    Hoher Speicheraufwand:Bäume benötigen zusätzlichen Speicher zum Speichern von Knotenreferenzen oder Zeigern, was im Vergleich zu linearen Datenstrukturen wie Arrays oder Listen zu einer höheren Speichernutzung führen kann.Komplexe Implementierung:Die Implementierung und Pflege einer Baumdatenstruktur kann im Vergleich zu anderen Datenstrukturen wie Arrays oder Listen komplexer sein, insbesondere bei ausgewogenen Baumvarianten.Eingeschränkter Betrieb:Einige Baumvarianten, wie etwa binäre Suchbäume, unterstützen keine effizienten Operationen wie das Finden des k-kleinsten Elements oder das Ermitteln des Rangs eines Elements.

Funktionen:

    Einfügung:Fügen Sie dem Baum einen neuen Knoten hinzu.Streichung:Entfernen Sie einen Knoten aus dem Baum.Suchen:Suchen Sie einen bestimmten Knoten oder ein bestimmtes Element im Baum.Durchquerung:Durchlaufen Sie den Baum in verschiedenen Reihenfolgen, z. B. in der Reihenfolge, vor der Bestellung oder nach der Bestellung.Höhe/Tiefe:Berechnen Sie die Höhe oder Tiefe des Baumes.Gleichgewicht:Stellen Sie sicher, dass der Baum im Gleichgewicht bleibt, um einen effizienten Betrieb aufrechtzuerhalten.

Implementierung:

Dateiname: 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)>