logo

Datastructuren in Java

De talrijke manieren waarop gegevens binnen een computerprogramma kunnen worden gerangschikt, opgeslagen en verwerkt, worden in Java datastructuren genoemd. Deze structuren bieden een methodische methode voor het effectief verwerken en beheren van gegevens, waardoor nuttige handelingen mogelijk worden zoals invoegen, verwijderen, ophalen en doorlopen.

Het artikel onderzoekt alles wat te maken heeft met de datastructuren in Java, en helpt beginners dit gemakkelijk en effectief te begrijpen.

  • Wat is Java?
  • Wat zijn gegevensstructuren in Java?
  • Soorten gegevensstructuren in Java
  • Voordelen van datastructuren in Java
  • Classificatie van datastructuren
  • Veelgestelde vragen over gegevensstructuren in Java

Wat is Java?

Java is een populaire objectgeoriënteerde programmeertaal die bekend staat om zijn enorme standaardbibliotheek en platformvrijheid. Het biedt een solide architectuur voor het maken van programma's die zonder hercompilatie op verschillende platforms kunnen worden uitgevoerd. De bekende bibliotheek voor Java beschikt over een keuze uit recordsystemen die het mogelijk maken om efficiënt met talrijke gegevenstypen om te gaan.

Wat zijn gegevensstructuren in Java?

De manier waarop gegevens worden georganiseerd en opgeslagen in het geheugen van een computerprogramma is sterk afhankelijk van Java-recordstructuren. De bekende Java-bibliotheek bevat een aanzienlijk type ingebouwde statistische structuren. Enkele van de recordsystemen waarmee programmeurs op korte en eenvoudige manieren gegevens kunnen opslaan en ordenen, zijn onder meer verbonden lijsten, stapels, wachtrijen en arrays. Ontwikkelaars kunnen snel bewerkingen uitvoeren zoals invoegen, verwijderen, zoeken en sorteren, omdat ze een reeks mechanismen bieden voor het verkrijgen van toegang tot, het wijzigen en beheren van gegevens. Java-programmeurs kunnen het geheugengebruik verminderen en de algehele efficiëntie van hun programma's aanzienlijk verhogen door deze datastructuren te gebruiken.

Soorten gegevensstructuren in Java

De lijst met datastructuren in Java vindt u hieronder

  1. Arrays
  2. ArrayLijst
  3. GelinkteLijst
  4. Stapel
  5. Wachtrij
  6. Hash kaart
  7. HashSet
  8. BoomSet
  9. Boomkaart
  10. Grafiek
  11. Boom

Het onderstaande diagram legt de soorten datastructuren in Java duidelijk heel duidelijk uit.

Datastructuren in Java

Verdere classificatie van soorten datastructuren:

Er zijn twee soorten gegevensstructuren: -

  1. Primitieve datastructuren
  2. Niet-primitieve datastructuren

1) Primitieve datastructuren: Ook bekend als primitieve gegevenstypen. Dit zijn standaard ingebouwde gegevenstypen in Java. Ze bevatten:

    Byte:Slaat hele getallen op van -128 tot 127.kort:Slaat hele getallen op van -32.768 tot 32.767.int.:Slaat hele getallen op van -2.147.483.648 tot 2.147.483.647.vlot:Slaat getallen met drijvende komma op met enkele precisie.teken:Slaat individuele karakters op.booleaans:Slaat ware of valse waarden op.lang:Slaat grote gehele getallen op.Dubbele:Slaat getallen met drijvende factoren op met dubbele precisie.

2) Niet-primitieve datastructuren: Niet-primitieve archiefstructuren zijn complexer en bestaan ​​uit primitieve soorten informatie. Ze kunnen bovendien in twee soorten worden onderverdeeld:

    Lineaire gegevensstructuren:In lineaire datastructuren zijn de elementen lineair of opeenvolgend gerangschikt. Voorbeelden zijn onder meer:
      Arrays:Een groep identiek getypeerde elementen die in een array zijn geplaatst volgens een vooraf bepaalde opstelling.Stapels:Een Last-In-First-Out (LIFO)-structuur waarin alleen de bovenste items kunnen worden toegevoegd of verwijderd.Staarten:First-In-First-Out (FIFO)-structuren worden gebruikt in wachtrijen, waarbij items aan de geretourneerde kant worden ingevoegd en aan de voorkant worden verwijderd.Gekoppelde lijst:Een gerelateerde lijst bestaat uit een verzameling gadgets die knooppunten worden genoemd en die elk een verwijzing hebben naar het knooppunt erna en statistieken daarin.
    Niet-lineaire datastructuren:In niet-lineaire datastructuren zijn de elementen op een niet-sequentiële manier gerangschikt. Voorbeelden zijn onder meer:
      Bomen:Bomen zijn een soort op knooppunten gebaseerde hiërarchische structuur, met een hoofdknooppunt bovenaan en onderliggende knooppunten die daaruit vertakken. Voorbeelden hiervan zijn rood-zwarte bomen, AVL-bomen, binaire zoekbomen en binaire bomen.Grafieken:Een reeks knooppunten die zijn verbonden door middel van randen, waarbij knooppunten een willekeurig aantal verbindingen kunnen hebben. Grafieken worden gebruikt om complexe relaties tussen items te symboliseren.Hoop:Een gespecialiseerde boomgebaseerde structuur waarin elk bepaald knooppunt een waarde heeft die groter of kleiner is dan zijn kinderen, afhankelijk van het feit of het een maximale heap of een minimale heap is.Hasj:Gegevensstructuren die een hashfunctie gebruiken om sleutels aan waarden toe te wijzen. Voorbeelden hiervan zijn hashsets en hashmaps, waarmee op groene wijze statistieken kunnen worden opgehaald en opgeslagen op basis van precieze sleutels.
Datastructuren in Java

Voordelen van datastructuren in Java

    Efficiënte gegevensorganisatie:Datastructuren bieden georganiseerde manieren om gegevens op te slaan en te beheren, waardoor efficiënte toegang, manipulatie en ophaalbewerkingen mogelijk zijn. Ze optimaliseren het geheugengebruik en vergemakkelijken een snellere uitvoering van algoritmen.Betere prestatie:Ontwikkelaars kunnen de prestaties op het gebied van snelheid en geheugengebruik verbeteren door de geschikte datastructuur voor een bepaalde activiteit te selecteren. De prestaties worden geoptimaliseerd omdat specifieke datastructuren zo zijn gemaakt dat ze uitblinken in bepaalde acties, zoals het zoeken, sorteren of invoegen van informatie.Herbruikbaarheid van code:Java biedt een breed scala aan ingebouwde datastructuren die voor programmeurs eenvoudig te gebruiken zijn. Deze herbruikbare datastructuren besparen tijd en moeite doordat het niet meer nodig is om vanaf het begin geavanceerde algoritmen te creëren.Eenvoud van code:Datastructuren maken de implementatie van ingewikkelde processen eenvoudiger te coderen. Ze bieden abstracties op hoog niveau en omvatten de specifieke kenmerken van gegevensbeheer, waardoor de leesbaarheid, onderhoudbaarheid en duidelijkheid van de code worden verbeterd.Flexibiliteit en aanpassingsvermogen:Datastructuren bieden flexibiliteit bij het verwerken van verschillende soorten en maten gegevens. Ze kunnen zich dynamisch aanpassen aan veranderende datavereisten en bieden mechanismen voor efficiënte datamanipulatie.Gestandaardiseerd en goed getest:De standaardbibliotheek voor Java bevat ingebouwde datastructuren die aanzienlijke tests en optimalisaties hebben ondergaan, waardoor hun betrouwbaarheid en prestaties zijn gegarandeerd. Het gebruik van deze gemeenschappelijke datastructuren verkleint de kans op fouten en geeft applicatieontwikkeling een solide basis.Schaalbaarheid:Datastructuren bieden schaalbaarheidsopties, waardoor applicaties efficiënt grote hoeveelheden gegevens kunnen verwerken. Ze kunnen dynamisch groeien of krimpen op basis van de datagrootte, waardoor optimale prestaties worden gegarandeerd, zelfs bij toenemende datavereisten.Algoritmeontwerp:Datastructuren zijn cruciaal bij het ontwerpen en analyseren van algoritmen. Ze bieden de onderliggende structuur en bewerkingen die nodig zijn voor het implementeren van verschillende algoritmen en het oplossen van complexe problemen.

1) Arrays:

Een array is een eenvoudige en vaak gebruikte datastructuur in de context van de datastructuren van Java. Het biedt een methode voor het opslaan van een verzameling componenten van een vast formaat. Omdat ze snelle en gemakkelijke toegang bieden tot elementen, afhankelijk van hun index, zijn arrays een cruciaal hulpmiddel voor het beheren en organiseren van gegevens.

Voordelen:

    Gegevensorganisatie:Arrays bieden een gestructureerde manier om elementen op te slaan en te organiseren, waardoor het gegevensbeheer wordt verbeterd.Willekeurige toegang:Elementen zijn rechtstreeks toegankelijk via hun index, waardoor ze efficiënt kunnen worden opgehaald en gewijzigd.Vaste maat:Arrays hebben een vooraf bepaalde grootte, waardoor efficiënte geheugentoewijzing mogelijk is.Homogene elementen:Arrays slaan elementen van hetzelfde type op, waardoor gegevensconsistentie wordt gewaarborgd en bewerkingen worden vereenvoudigd.Iteratie:Arrays ondersteunen eenvoudige iteratie door elementen, waardoor het doorlopen en verwerken wordt vergemakkelijkt.Sorteren en zoeken:Arrays werken goed samen met sorteer- en zoekalgoritmen en bieden efficiënte bewerkingen.Geheugenefficiëntie:Arrays optimaliseren het geheugengebruik door elementen in aaneengesloten gebieden op te slaan.Compatibiliteit:Arrays worden breed ondersteund in Java, waardoor ze compatibel zijn met verschillende frameworks en tools.

Nadelen:

    Vaste maat:Het formaat van arrays kan niet dynamisch worden aangepast, waardoor recreatie nodig is voor wijzigingen in de grootte.Geheugenverspilling:Ongebruikte elementen in grotere arrays kunnen tot geheugenverspilling leiden.Overhead voor invoegen en verwijderen:Het invoegen of verwijderen van elementen in het midden van een array vereist het verschuiven van daaropvolgende elementen, wat resulteert in inefficiëntie.Gebrek aan flexibiliteit:Arrays hebben rigide gegevenstypen en kunnen niet verschillende soorten gegevens bevatten zonder extra arrays of datastructuren.

Functies:

    Een array maken:Declareer en initialiseer een array met een specifieke grootte met behulp van het arraytype en het nieuwe sleutelwoord.Toegang tot elementen:Gebruik de index om toegang te krijgen tot individuele elementen in de array.Elementen aanpassen:Werk de waarde van een element bij door een nieuwe waarde toe te wijzen aan een specifieke index in de array.Lengte vinden:Gebruik het lengte-attribuut om de lengte van de array te bepalen.Itereren door de array:Gebruik lussen om elk element in de array te doorlopen en uit te voeren

Implementatie:

Bestandsnaam: 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) ArrayLijst:

ArrayList in Java is een dynamische gegevensstructuur die de opslag en manipulatie van elementen mogelijk maakt. Het maakt deel uit van het Java Collections Framework en wordt intern geïmplementeerd met behulp van een array.

Voordelen:

    Dynamische grootte:In tegenstelling tot arrays kunnen ArrayLists dynamisch groter of kleiner worden naarmate elementen worden toegevoegd of verwijderd. Het elimineert de noodzaak van handmatig aanpassen van de grootte en maakt het gemakkelijk om met verschillende hoeveelheden gegevens om te gaan.Eenvoudige elementmanipulatie:ArrayLists bieden methoden om elementen op elke positie in de lijst toe te voegen, te verwijderen en te wijzigen. De flexibiliteit vereenvoudigt algemene handelingen zoals het invoegen, verwijderen en bijwerken, waardoor de manipulatie van elementen efficiënter wordt.Willekeurige toegang:ArrayLists ondersteunen willekeurige toegang tot elementen met behulp van hun index, waardoor elementen op specifieke posities in de lijst snel kunnen worden opgehaald en gewijzigd. Het vergemakkelijkt efficiënte toegang tot elementen en verbetert de algehele prestaties.Compatibiliteit met Java Collection Framework:ArrayLists implementeren de List-interface, waardoor ze compatibel zijn met andere Collection-klassen in het Java Collections Framework. De compatibiliteit ervan zorgt voor een naadloze integratie met verschillende algoritmen en bewerkingen die door het raamwerk worden aangeboden.

Nadelen:

    Hogere geheugenoverhead:ArrayLists hebben extra geheugen nodig om hun interne structuur te behouden, wat resulteert in een hogere geheugenoverhead in vergelijking met arrays. Dit kan een probleem zijn bij het omgaan met grote verzamelingen elementen.Langzamer invoegen en verwijderen:Het invoegen of verwijderen van elementen in het midden van een ArrayList vereist het verschuiven van elementen, wat bij grote lijsten tijdrovend kan zijn. In scenario's waarin frequente invoeg- of verwijderingsbewerkingen worden verwacht, kunnen andere gegevensstructuren zoals LinkedList betere prestaties bieden.Beperkte prestaties voor zoeken:Zoeken naar een element in een ongesorteerde ArrayList vereist het herhalen van de elementen totdat er een overeenkomst is gevonden. Het is een lineaire zoekaanpak die resulteert in langzamere zoekprestaties in vergelijking met datastructuren die zijn geoptimaliseerd voor zoeken, zoals HashSet of TreeMap.Geen ondersteuning voor primitieve typen:ArrayLists kunnen alleen objecten opslaan en ondersteunen niet direct primitieve gegevenstypen zoals int of char. Om primitieve typen op te slaan, moeten wrapper-klassen zoals Integer of Character worden gebruikt, wat leidt tot mogelijke overhead voor autoboxing en unboxing.

Functies:

wat is winterslaap in Java
    Een ArrayList maken:Declareer en initialiseer een ArrayList met behulp van de klasse ArrayList en specificeer het elementtype tussen punthaken.Elementen toevoegen:Gebruik de add-methode om elementen aan het einde van de ArrayList toe te voegen.Toegang tot elementen:Gebruik de get-techniek om de prijs van details bij een geselecteerde index op te halen.Elementen aanpassen:Update de detailkosten op een specifieke index voor het gebruik van de vaste aanpak.Grootte vinden:Gebruik de dimensiemethode om het geavanceerde aantal factoren in de ArrayList te verkrijgen.Elementen verwijderen:Gebruik de verwijderaanpak om een ​​detail uit een specifieke index te verwijderen of door de objectreferentie op te geven.Itereren door de ArrayList:Gebruik lussen om elk element in de ArrayList te herhalen en er bewerkingen op uit te voeren.

Implementatie:

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

Uitgang:

 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) Gelinkte lijst:

Een gekoppelde lijst is een lineaire gegevensstructuur waarin elementen worden opgeslagen in afzonderlijke objecten die knooppunten worden genoemd. Een referentielink naar het volgende knooppunt in de reeks is opgenomen in het gegevenselement van elk knooppunt. Het laatste knooppunt van de lijst linkt naar null, wat aangeeft dat de lijst is beëindigd.

In tegenstelling tot arrays vereisen gekoppelde lijsten geen aaneengesloten geheugentoewijzing. Elk knooppunt in een gekoppelde lijst kan onafhankelijk worden toegewezen, waardoor dynamische geheugentoewijzing en efficiënte invoeg- en verwijderbewerkingen mogelijk zijn.

Voordelen:

    Dynamische grootte:LinkedList kan dynamisch groeien of krimpen, waardoor het geschikt is voor variërende of onbekende datagroottes.Efficiënt inbrengen en verwijderen:Het invoegen of verwijderen van elementen binnen een LinkedList is efficiënt, omdat er geen verschuiving van elementen nodig is.Geen aaneengesloten geheugenvereiste:LinkedList heeft geen aaneengesloten geheugentoewijzing nodig, waardoor het flexibel en geschikt is voor onvoorspelbare geheugensituaties.Eenvoudige wijziging:LinkedList maakt eenvoudige wijziging van elementen mogelijk door referentiepunten te wijzigen, waardoor efficiënte manipulatie mogelijk wordt.

Nadelen:

c# voorbeeldcode
    Langzamere willekeurige toegang:LinkedList heeft langzamere willekeurige toegang omdat het vereist dat de lijst wordt doorlopen om toegang te krijgen tot elementen per index.Verhoogde geheugenoverhead:LinkedList vereist extra geheugen voor referenties en knooppunten, waardoor de geheugenoverhead toeneemt in vergelijking met arrays.Inefficiënt zoeken:LinkedList heeft langzamere zoekbewerkingen, waardoor sequentiële iteratie nodig is om specifieke elementen te vinden.

Functies:

    Een gekoppelde lijst maken:Declareer en initialiseer een LinkedList met behulp van de LinkedList-klasse.Elementen toevoegen:Gebruik de add-methode om elementen aan het einde van de LinkedList toe te voegen.Toegang tot elementen:Gebruik de get-methode om de waarde van een element bij een specifieke index op te halen.Elementen aanpassen:Werk de waarde van een element bij een bepaalde index bij met behulp van de set-methode.Elementen verwijderen:Gebruik de verwijdermethode om een ​​element uit een specifieke index te verwijderen of door de objectreferentie op te geven.

Implementatie:

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

Uitgang:

 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:

Het Last-In-First-Out (LIFO)-principe schrijft voor dat het element dat het laatst is ingevoegd, ook het element is dat het eerst wordt verwijderd. Een stapel is een lineaire gegevensstructuur die deze regel volgt. Het gebruikt de commando's 'push' en 'pop' om elementen aan de stapel toe te voegen en dienovereenkomstig het bovenste element van de stapel te verwijderen. De 'peek'-techniek maakt bovendien toegang tot het bovenste element mogelijk zonder het te verwijderen.

Kenmerken van een stapel:

    LIFO-gedrag:Het laatste element dat op de stapel wordt geschoven, is het eerste dat eruit wordt gehaald, waardoor het geschikt is voor toepassingen waarbij de volgorde van plaatsen en verwijderen belangrijk is.Beperkte toegang:Stapels bieden doorgaans beperkte toegang tot elementen. Je hebt alleen toegang tot het bovenste element, en om andere elementen te bereiken moet je de elementen erboven plaatsen.Dynamische grootte:Stapels kunnen worden geïmplementeerd met behulp van arrays of gekoppelde lijsten, waardoor een dynamische grootte mogelijk is. Ze kunnen tijdens de runtime naar behoefte groeien of krimpen.

Voordelen:

    Eenvoud:Stapels zijn gemakkelijk te begrijpen en te implementeren.Efficiëntie:Invoeg- en verwijderbewerkingen hebben een tijdscomplexiteit van O(1).Beheer van functieoproepen:Stacks beheren op efficiënte wijze functieaanroepen en variabele opslag.Ongedaan maken/opnieuw uitvoeren:Stapels maken bewerkingen voor ongedaan maken en opnieuw uitvoeren in toepassingen mogelijk.

Nadelen:

    Beperkte toegang:Toegang tot elementen is beperkt tot de bovenkant van de stapel.Groottebeperkingen:Stapels kunnen groottebeperkingen hebben, afhankelijk van de implementatie.Niet geschikt voor alle scenario's:Stapels zijn specifiek voor LIFO-gedrag en zijn in andere gevallen mogelijk niet geschikt.

Implementatie:

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

Uitgang:

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

5) Wachtrij:

Een wachtrij is een lineaire gegevensstructuur in Java die het First-In-First-Out (FIFO)-principe volgt. Het vertegenwoordigt een verzameling elementen waarbij elementen aan de achterkant worden ingebracht en aan de voorkant worden verwijderd.

Functies:

    In wachtrij:Een element toevoegen aan de achterkant van de wachtrij.Uit wachtrij:Een element verwijderen van de voorkant van de wachtrij.Kijkje:Haal het element vooraan in de wachtrij op zonder het te verwijderen.Maat:Bepalen van het aantal elementen in de wachtrij.Lege cheque:Controleren of de wachtrij leeg is.

Voordelen:

    FIFO-gedrag:Elementen worden verwerkt in de volgorde waarin ze worden ingevoegd, waardoor de oorspronkelijke volgorde behouden blijft.Efficiënt inbrengen en verwijderen:Het toevoegen en verwijderen van elementen uit een wachtrij gaat snel en heeft een constante tijdscomplexiteit van O(1).Synchronisatie:Java biedt gesynchroniseerde wachtrij-implementaties, waardoor ze veilig zijn voor gelijktijdig programmeren.Gestandaardiseerde interface:De Queue-interface in Java biedt een gemeenschappelijke reeks methoden, waardoor eenvoudige uitwisselbaarheid tussen verschillende wachtrij-implementaties mogelijk is.

Nadelen:

    Geen willekeurige toegang:Wachtrijen ondersteunen geen directe toegang tot elementen in het midden. Om toegang te krijgen tot specifieke posities is het nodig om voorgaande elementen uit de wachtrij te halen.Beperkte maat:Sommige wachtrij-implementaties hebben een vaste grootte of capaciteit, wat leidt tot overflow of uitzonderingen bij het overschrijden van de maximale grootte.Inefficiënt zoeken:Zoeken naar een element in een wachtrij vereist het uit de wachtrij halen totdat er een match is gevonden, wat resulteert in een lineaire zoekopdracht met een potentieel hoge tijdscomplexiteit.

Implementatie:

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

Uitgang:

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

6) HashMap:

Een HashMap is een gegevensstructuur in Java die een manier biedt om sleutel-waardeparen op te slaan en op te halen. Het maakt deel uit van het Java Collections Framework en wordt geïmplementeerd op basis van de datastructuur van de hashtabel.

Functies:

    zet(sleutel, waarde):Voegt het opgegeven sleutel-waardepaar in de HashMap in.krijgen(sleutel):Haalt de waarde op die aan de opgegeven sleutel is gekoppeld.bevatSleutel(sleutel):Controleert of de HashMap de opgegeven sleutel bevat.bevatWaarde(waarde):Controleert of de HashMap de opgegeven waarde bevat.verwijder(sleutel):Verwijdert het sleutelwaardepaar dat is gekoppeld aan de opgegeven sleutel uit de HashMap.maat():Retourneert het aantal sleutelwaardeparen in de HashMap.is leeg():Controleert of de HashMap leeg is.sleutelbos():Retourneert een set met alle sleutels in de HashMap.waarden():Retourneert een verzameling die alle waarden in de HashMap bevat.duidelijk():Verwijdert alle sleutel-waardeparen uit de HashMap.

Voordelen:

    Efficiënt ophalen:HashMap zorgt voor het snel ophalen van waarden op basis van sleutels met constante tijdcomplexiteit O(1).Flexibele sleutel-waardekoppeling:HashMap staat elk niet-null-object toe als sleutel, waardoor op maat gedefinieerde sleutels mogelijk zijn voor het opslaan en ophalen van gegevens.Dynamische grootte:HashMap kan dynamisch groter of kleiner worden om wisselende hoeveelheden gegevens te verwerken.Compatibiliteit met Java Collections Framework:HashMap implementeert de Map-interface, waardoor naadloze integratie met andere Collection-klassen mogelijk is.

Nadelen:

    Gebrek aan bestelling:HashMap behoudt de volgorde van de elementen niet. Gebruik LinkedHashMap of TreeMap voor specifieke bestelvereisten.Verhoogde geheugenoverhead:HashMap vereist extra geheugen voor hashcodes en interne structuur in vergelijking met eenvoudigere datastructuren.Langzamere iteratie:Het herhalen van een HashMap kan langzamer zijn in vergelijking met arrays of lijsten, omdat de onderliggende hashtabel wordt doorlopen.

Implementatie:

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

Uitgang:

 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 is een gegevensstructuur in Java die de Set-interface implementeert en elementen opslaat in een hashtabel.

Functies:

    Slaat unieke elementen op:HashSet staat geen dubbele elementen toe. Elk element in de HashSet is uniek.Maakt gebruik van op hash gebaseerde zoekopdrachten:HashSet gebruikt de hashwaarde van elk element om de opslaglocatie ervan te bepalen, waardoor het efficiënt ophalen van elementen mogelijk wordt.Ongeordende collectie:De elementen in een HashSet worden niet in een specifieke volgorde opgeslagen. De volgorde van de elementen kan in de loop van de tijd veranderen.

Voordelen:

    Snel opzoeken van elementen:HashSet biedt snelle opzoekbewerkingen, waardoor het efficiënt is om te controleren of een element in de set bestaat.Geen dubbele elementen:HashSet verwerkt automatisch dubbele elementen en zorgt ervoor dat elk element uniek is.Integratie met Java Collections Framework:HashSet implementeert de Set-interface, waardoor deze compatibel wordt met andere verzamelklassen in het Java Collections Framework.

Nadelen:

hernoem de Linux-map
    Geen gegarandeerde bestelling:HashSet handhaaft de volgorde van de elementen niet. Als de volgorde van de elementen belangrijk is, is HashSet niet geschikt.Geen indexering:HashSet biedt geen directe indexering of positionele toegang tot elementen. Om toegang te krijgen tot elementen, moet u de set doorlopen.Hogere geheugenoverhead:HashSet heeft extra geheugen nodig om hashwaarden op te slaan en de hashtabelstructuur te behouden, wat resulteert in een hoger geheugengebruik in vergelijking met sommige andere datastructuren.

Implementatie:

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

Uitgang:

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

TreeSet is een implementatie van de SortedSet-interface in Java die een zelfbalancerende binaire zoekboom gebruikt, een rood-zwarte boom genaamd, om elementen in gesorteerde volgorde op te slaan.

Voordelen:

    Gesorteerde volgorde:TreeSet houdt de elementen automatisch in een gesorteerde volgorde bij op basis van hun natuurlijke volgorde of een aangepaste comparator. Het maakt efficiënt zoeken en ophalen van elementen in oplopende of aflopende volgorde mogelijk.Geen dubbele elementen:TreeSet staat geen dubbele elementen toe. Het zorgt ervoor dat elk element in de set uniek is, wat handig kan zijn in scenario's waarin dubbele waarden moeten worden vermeden.Efficiënte bedrijfsvoering:TreeSet biedt efficiënte bewerkingen zoals invoegen, verwijderen en zoeken. Deze bewerkingen hebben een tijdscomplexiteit van O(log n), waarbij n het aantal elementen in de set is.Navigeerbare setbewerkingen:TreeSet biedt aanvullende navigatiemethoden, zoals hogere(), lagere(), plafond() en vloer(), waarmee u elementen kunt vinden die groter zijn dan, kleiner dan of gelijk zijn aan een bepaalde waarde.

Nadelen:

    Bovengronds:TreeSet heeft extra geheugen nodig om de interne datastructuur op te slaan, wat kan leiden tot een hogere geheugenoverhead in vergelijking met andere set-implementaties.Langzamer inbrengen en verwijderen:Bij het invoegen en verwijderen in TreeSet wordt de gesorteerde volgorde van de elementen gehandhaafd, wat mogelijk een boomherstructurering vereist. Het kan deze bewerkingen iets langzamer maken in vergelijking met HashSet of LinkedHashSet.Beperkte maatwerk:TreeSet is in de eerste plaats ontworpen voor natuurlijke bestellingen of een enkele aangepaste vergelijker. Er is mogelijk meer flexibiliteit nodig voor meerdere sorteercriteria of complexe sorteerlogica.

Functies:

    toevoegen(element):Voegt een element toe aan de TreeSet terwijl de gesorteerde volgorde behouden blijft.verwijder(element):Verwijdert het opgegeven element uit de TreeSet.bevat(element):Controleert of de TreeSet het opgegeven element bevat.maat():Retourneert het aantal elementen in de TreeSet.Eerst():Retourneert het eerste (laagste) element in de TreeSet.laatst():Retourneert het laatste (hoogste) element in de TreeSet.hoger(element):Retourneert het kleinste element in de TreeSet dat strikt groter is dan het opgegeven element.lager(element):Retourneert het grootste element in de TreeSet dat strikt kleiner is dan het opgegeven element.

Implementatie:

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

Uitgang:

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

TreeMap is een klasse in Java die de Map-interface implementeert en een gesorteerde sleutel-waarde-toewijzing biedt op basis van de natuurlijke volgorde van de sleutels of een aangepaste comparator.

Voordelen:

    Gesorteerde volgorde:TreeMap bewaart de sleutels in gesorteerde volgorde, wat efficiënt zoeken, ophalen en op bereik gebaseerde bewerkingen mogelijk maakt.Sleutel-waarde mapping:TreeMap slaat sleutel-waardeparen op, waardoor het efficiënt opzoeken en ophalen van waarden mogelijk is op basis van de bijbehorende sleutels.Rood-zwarte boomimplementatie:TreeMap maakt intern gebruik van een gebalanceerde binaire zoekboom (Red-Black Tree), waardoor efficiënte prestaties worden gegarandeerd, zelfs voor grote datasets.Ondersteuning voor aangepaste vergelijkers:TreeMap maakt het gebruik van aangepaste comparatoren mogelijk om de sorteervolgorde van de sleutels te definiëren, wat flexibiliteit biedt bij de sorteercriteria.

Nadelen:

    Geheugenoverhead:TreeMap vereist extra geheugen om de interne boomstructuur en bijbehorende objecten op te slaan, wat resulteert in een hoger geheugengebruik vergeleken met eenvoudigere datastructuren zoals HashMap.Langzamer invoegen en verwijderen:Invoeg- en verwijderbewerkingen in TreeMap hebben een tijdscomplexiteit van O(log n) vanwege de noodzaak voor boomherstructurering, waardoor ze langzamer zijn vergeleken met HashMap of LinkedHashMap.Beperkte prestaties voor ongesorteerde gegevens:TreeMap presteert efficiënt voor gesorteerde gegevens, maar de prestaties kunnen afnemen bij het omgaan met ongesorteerde gegevens of frequente wijzigingen, omdat de gesorteerde volgorde moet worden gehandhaafd.

Functies:

javascript-tutorial
    zet(sleutel, waarde):Voegt een sleutelwaardepaar in de TreeMap in.krijgen(sleutel):Haalt de waarde op die aan de opgegeven sleutel is gekoppeld.bevatSleutel(sleutel):Controleert of de TreeMap een specifieke sleutel bevat.verwijder(sleutel):Verwijdert het sleutel-waardepaar dat aan de opgegeven sleutel is gekoppeld.maat():Retourneert het aantal sleutelwaardeparen in de TreeMap.sleutelbos():Retourneert een set van alle sleutels in de TreeMap.waarden():Retourneert een verzameling van alle waarden in de TreeMap.entrySet():Retourneert een set sleutel-waardeparen in de TreeMap.

Implementatie:

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

Uitgang:

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

Grafieken zijn gegevensstructuren die een verzameling onderling verbonden knooppunten of hoekpunten vertegenwoordigen. Ze zijn samengesteld uit hoekpunten en randen, waarbij hoekpunten entiteiten vertegenwoordigen en randen de relaties tussen die entiteiten vertegenwoordigen.

Voordelen:

    Veelzijdigheid:Grafieken kunnen een breed scala aan scenario's uit de echte wereld weergeven, waardoor ze geschikt zijn voor verschillende toepassingen, zoals sociale netwerken, transportsystemen en computernetwerken.Relatievertegenwoordiging:Grafieken bieden een natuurlijke manier om relaties en verbindingen tussen entiteiten weer te geven, waardoor een efficiënte analyse en doorloop van deze relaties mogelijk wordt.Efficiënt zoeken en doorlopen:Grafiekalgoritmen zoals breedte-eerst zoeken (BFS) en diepte-eerst zoeken (DFS) maken het efficiënt doorzoeken en doorzoeken van de hoekpunten en randen van de grafiek mogelijk.Modelleren van complexe relaties:Grafieken kunnen complexe relaties modelleren, waaronder hiërarchische structuren, cyclische afhankelijkheden en meerdere verbindingen tussen entiteiten.

Nadelen:

    Ruimtecomplexiteit:Grafieken kunnen een aanzienlijke hoeveelheid geheugen in beslag nemen, vooral grootschalige grafieken met veel hoekpunten en randen.De complexiteit van operaties:Bepaalde grafiekbewerkingen, zoals het vinden van het kortste pad of het detecteren van cycli, kunnen een hoge tijdscomplexiteit hebben, vooral in dichte grafieken.Moeilijkheidsgraad bij onderhoud:Het aanpassen of bijwerken van een grafiek kan complex zijn, omdat veranderingen in de structuur van de grafiek van invloed kunnen zijn op de connectiviteit en bestaande algoritmen.

Implementatie:

Bestandsnaam: 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) Boom:

Een boom is een veelgebruikte gegevensstructuur in de informatica die een hiërarchische structuur vertegenwoordigt. Het bestaat uit knooppunten die zijn verbonden door randen, waarbij elk knooppunt nul of meer onderliggende knooppunten kan hebben.

Voordelen:

    Hiërarchische structuur:Bomen bieden een natuurlijke manier om hiërarchische relaties weer te geven, zoals bestandssystemen, organigrammen of HTML/XML-documenten.Efficiënt zoeken:Binaire zoekbomen maken efficiënt zoeken mogelijk met een tijdscomplexiteit van O(log n), waardoor ze geschikt zijn voor het opslaan en ophalen van gesorteerde gegevens.Snel invoegen en verwijderen:Boomdatastructuren bieden efficiënte invoeg- en verwijderingsbewerkingen, vooral als ze in balans zijn, zoals AVL-bomen of rood-zwarte bomen.Bestelde iteratie:Het in volgorde doorlopen van een binaire zoekboom geeft elementen in een gesorteerde volgorde, wat handig is voor taken zoals het afdrukken van elementen in gesorteerde volgorde of het vinden van het volgende/vorige element.

Nadelen:

    Hoge geheugenoverhead:Bomen hebben extra geheugen nodig om knooppuntreferenties of pointers op te slaan, wat kan resulteren in een hoger geheugengebruik in vergelijking met lineaire gegevensstructuren zoals arrays of lijsten.Complexe implementatie:Het implementeren en onderhouden van een boomdatastructuur kan complexer zijn in vergelijking met andere datastructuren zoals arrays of lijsten, vooral voor gebalanceerde boomvarianten.Beperkte operaties:Sommige boomvarianten, zoals binaire zoekbomen, ondersteunen geen efficiënte bewerkingen zoals het vinden van het k-de kleinste element of het vinden van de rangorde van een element.

Functies:

    Plaatsing:Voeg een nieuw knooppunt toe aan de boom.Verwijdering:Verwijder een knooppunt uit de boom.Zoekopdracht:Zoek een specifiek knooppunt of element in de boom.Traversaal:Doorloop de boom in verschillende volgordes, zoals in volgorde, pre-order of post-order.Hoogte/diepte:Bereken de hoogte of diepte van de boom.Evenwicht:Zorg ervoor dat de boom in balans blijft om een ​​efficiënte werking te behouden.

Implementatie:

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