logo

Strukture podataka u Javi

Brojni načini na koje se podaci mogu organizirati, spremati i rukovati unutar računalnog programa nazivaju se strukturama podataka u Javi. Ove strukture nude metodičnu metodu za učinkovito rukovanje i upravljanje podacima, omogućujući korisne operacije poput umetanja, brisanja, dohvaćanja i obilaženja.

Članak će istražiti sve što je povezano sa strukturama podataka u Javi, a pomaže početnicima da lako i učinkovito razumiju.

  • Što je Java?
  • Što su strukture podataka u Javi?
  • Vrste struktura podataka u Javi
  • Prednosti struktura podataka u Javi
  • Klasifikacija struktura podataka
  • Često postavljana pitanja o strukturama podataka u Javi

Što je Java?

Java je popularan objektno orijentirani programski jezik poznat po svojoj ogromnoj standardnoj biblioteci i slobodi platforme. Nudi solidnu arhitekturu za stvaranje programa koji se izvode bez ponovne kompilacije na različitim platformama. Dobro poznata knjižnica za Javu ima izbor sustava zapisa koji omogućavaju učinkovito rukovanje brojnim tipovima podataka.

Što su strukture podataka u Javi?

Način na koji su podaci organizirani i pohranjeni u memoriji računalnog programa usko se oslanja na strukture Java zapisa. Dobro poznata Java biblioteka uključuje značajan tip ugrađenih statističkih struktura. Neki od sustava zapisa koji programerima omogućuju kratke i jednostavne načine spremanja i raspoređivanja podataka uključuju povezane popise, hrpe, redove čekanja i nizove. Programeri mogu brzo izvesti operacije kao što su umetanje, brisanje, pretraživanje i sortiranje jer pružaju niz mehanizama za dobivanje pristupa, mijenjanje i upravljanje podacima. Java programeri mogu smanjiti korištenje memorije i značajno povećati ukupnu učinkovitost svojih programa korištenjem ovih struktura podataka.

Vrste struktura podataka u Javi

Dolje je naveden popis struktura podataka u Javi

  1. Nizovi
  2. ArrayList
  3. LinkedList
  4. Stog
  5. Red
  6. HashMap
  7. HashSet
  8. TreeSet
  9. TreeMap
  10. Grafikon
  11. Drvo

Donji dijagram vrlo jasno objašnjava vrste struktura podataka u Javi.

Strukture podataka u Javi

Daljnja klasifikacija tipova struktura podataka:

Postoje dvije vrste struktura podataka: -

  1. Primitivne strukture podataka
  2. Neprimitivne strukture podataka

1) Primitivne strukture podataka: Također poznati kao primitivni tipovi podataka, ovo su osnovni ugrađeni tipovi podataka u Javi. Oni uključuju:

    Bajt:Pohranjuje cijele brojeve od -128 do 127.kratak:Pohranjuje cijele brojeve od -32,768 do 32,767.int:Pohranjuje cijele brojeve od -2,147,483,648 do 2,147,483,647.plutati:Pohranjuje brojeve s pomičnim zarezom s jednom preciznošću.char:Pohranjuje pojedinačne znakove.Booleov:Pohranjuje istinite ili lažne vrijednosti.dugo:Pohranjuje velike cijele brojeve.Dvostruko:Pohranjuje brojeve pomičnih faktora s dvostrukom preciznošću.

2) Neprimitivne strukture podataka: Strukture neprimitivnih zapisa su složenije i sastoje se od primitivnih vrsta informacija. Osim toga, mogu se kategorizirati u dvije vrste:

    Linearne strukture podataka:U linearnim podatkovnim strukturama elementi su raspoređeni linearno ili sekvencijalno. Primjeri uključuju:
      Nizovi:Skupina identično tipiziranih elemenata smještenih u niz prema unaprijed određenom rasporedu.Hrpe:Struktura zadnjeg ulaza prvog izlaza (LIFO) u kojoj se mogu dodavati ili uklanjati samo najviše stavke.repovi:Strukture First-In-First-Out (FIFO) koriste se u redovima čekanja, gdje se stavke umeću na vraćene i vade na prednjoj strani.Povezani popis:Povezani popis sadrži zbirku gadgeta koji se nazivaju čvorovi, od kojih svaki ima referencu na čvor iza sebe i statistiku unutar njega.
    Nelinearne strukture podataka:U nelinearnim podatkovnim strukturama elementi su raspoređeni na nesekvencijalan način. Primjeri uključuju:
      Drveće:Stabla su vrsta hijerarhijske strukture temeljene na čvorovima, s korijenskim čvorom na vrhu i podređenim čvorovima koji se granaju iz njega. Primjeri uključuju crveno-crna stabla, AVL stabla, binarna stabla pretraživanja i binarna stabla.Grafikoni:Skup čvorova povezanih pomoću rubova, pri čemu čvorovi mogu imati bilo koju količinu veza. Grafikoni se koriste za simboliziranje složenih odnosa među stavkama.Hrpa:Specijalizirana struktura temeljena na stablu u kojoj svaki utvrđeni čvor ima vrijednost veću ili manju od svojih potomaka, ovisno o tome radi li se o maksimalnoj hrpi ili minimalnoj hrpi.Hash:Strukture podataka koje koriste hash funkciju za mapiranje ključeva u vrijednosti. Primjeri se sastoje od hash skupova i hash mapa, koji omogućuju zeleno dohvaćanje i pohranjivanje statistike na temelju preciznih ključeva.
Strukture podataka u Javi

Prednosti struktura podataka u Javi

    Učinkovita organizacija podataka:Strukture podataka pružaju organizirane načine za pohranu i upravljanje podacima, omogućujući učinkovit pristup, manipulaciju i operacije dohvaćanja. Oni optimiziraju korištenje memorije i olakšavaju brže izvršavanje algoritama.Bolja izvedba:Programeri mogu poboljšati performanse u smislu brzine i korištenja memorije odabirom odgovarajuće strukture podataka za određenu aktivnost. Performanse su optimizirane jer su određene strukture podataka napravljene tako da se ističu u određenim radnjama poput pretraživanja, sortiranja ili umetanja informacija.Ponovno korištenje koda:Java nudi širok raspon ugrađenih struktura podataka koje su programerima jednostavne za korištenje. Ove strukture podataka za višekratnu upotrebu štede vrijeme i trud uklanjajući potrebu za stvaranjem sofisticiranih algoritama od nule.Jednostavnost koda:Strukture podataka čine implementaciju kompliciranih procesa jednostavnijom za kodiranje. Oni nude apstrakcije visoke razine i sažimaju specifičnosti upravljanja podacima, što poboljšava čitljivost, lakoću održavanja i jasnoću koda.Fleksibilnost i prilagodljivost:Strukture podataka nude fleksibilnost u rukovanju različitim vrstama i veličinama podataka. Mogu se dinamički prilagoditi promjenjivim zahtjevima podataka i pružiti mehanizme za učinkovitu manipulaciju podacima.Standardizirano i dobro testirano:Standardna biblioteka za Javu sadrži ugrađene strukture podataka koje su prošle značajna testiranja i optimizacije, jamčeći njihovu pouzdanost i performanse. Korištenje ovih uobičajenih struktura podataka smanjuje mogućnost pogrešaka i daje razvoju aplikacija čvrstu osnovu.Skalabilnost:Strukture podataka pružaju mogućnosti skalabilnosti, omogućujući aplikacijama da učinkovito rukuju velikim količinama podataka. Mogu se dinamički povećavati ili smanjivati ​​na temelju veličine podataka, osiguravajući optimalnu izvedbu čak i uz sve veće zahtjeve za podacima.Dizajn algoritma:Strukture podataka ključne su u dizajnu i analizi algoritama. Oni pružaju temeljnu strukturu i operacije potrebne za implementaciju različitih algoritama i rješavanje složenih problema.

1) Nizovi:

Niz je osnovna i često korištena podatkovna struktura u kontekstu Javinih podatkovnih struktura. Nudi metodu pohranjivanja zbirke komponenti identičnog tipa fiksne veličine. Budući da omogućuju brz i jednostavan pristup elementima ovisno o njihovom indeksu, nizovi su ključan alat za upravljanje i organiziranje podataka.

Prednosti:

    Organizacija podataka:Nizovi pružaju strukturiran način za pohranjivanje i organiziranje elemenata, poboljšavajući upravljanje podacima.Nasumični pristup:Elementima se može pristupiti izravno pomoću njihovog indeksa, što omogućuje učinkovito dohvaćanje i modificiranje.Fiksna veličina:Nizovi imaju unaprijed određenu veličinu, što omogućuje učinkovitu alokaciju memorije.Homogeni elementi:Nizovi pohranjuju elemente iste vrste, osiguravajući dosljednost podataka i pojednostavljujući operacije.Ponavljanje:Nizovi podržavaju jednostavno ponavljanje kroz elemente, olakšavajući prolazak i obradu.Sortiranje i pretraživanje:Nizovi dobro funkcioniraju s algoritmima sortiranja i pretraživanja, nudeći učinkovite operacije.Učinkovitost memorije:Nizovi optimiziraju korištenje memorije pohranjivanjem elemenata u susjednim regijama.Kompatibilnost:Nizovi su naširoko podržani u Javi, što ih čini kompatibilnima s raznim okvirima i alatima.

Nedostaci:

    Fiksna veličina:Nizovima se ne može dinamički mijenjati veličina, što zahtijeva ponovno stvaranje za promjene veličine.Gubitak memorije:Neiskorišteni elementi u većim nizovima mogu dovesti do gubitka memorije.Trošak umetanja i brisanja:Umetanje ili brisanje elemenata u sredini niza zahtijeva pomicanje sljedećih elemenata, što rezultira neučinkovitošću.Nedostatak fleksibilnosti:Nizovi imaju krute tipove podataka i ne mogu prihvatiti različite vrste podataka bez dodatnih nizova ili struktura podataka.

Funkcije:

    Stvaranje niza:Deklarirajte i inicijalizirajte polje s određenom veličinom koristeći vrstu polja i novu ključnu riječ.Pristup elementima:Koristite indeks za pristup pojedinačnim elementima u nizu.Modificirajući elementi:Ažurirajte vrijednost elementa dodjeljivanjem nove vrijednosti određenom indeksu u nizu.Traženje duljine:Koristite atribut duljine za određivanje duljine niza.Iteracija kroz niz:Koristite petlje za prolazak kroz svaki element u nizu i izvršavanje

Implementacija:

Naziv datoteke: 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 u Javi je dinamička podatkovna struktura koja omogućuje pohranjivanje i rukovanje elementima. Dio je Java Collections Frameworka i implementiran je pomoću internog polja.

Prednosti:

    Dinamička veličina:Za razliku od polja, ArrayLists može dinamički rasti ili smanjivati ​​veličinu kako se elementi dodaju ili uklanjaju. Uklanja potrebu za ručnim mijenjanjem veličine i omogućuje jednostavno rukovanje različitim količinama podataka.Jednostavna manipulacija elementima:ArrayLists nude metode za dodavanje, uklanjanje i modificiranje elemenata na bilo kojem mjestu unutar popisa. Njegova fleksibilnost pojednostavljuje uobičajene operacije kao što su umetanje, brisanje i ažuriranje, čineći manipulaciju elementima učinkovitijom.Nasumični pristup:ArrayLists podržavaju nasumični pristup elementima koristeći njihov indeks, omogućujući brzo dohvaćanje i modificiranje elemenata na određenim pozicijama unutar popisa. Olakšava učinkovit pristup elementima i poboljšava ukupnu izvedbu.Kompatibilnost s Java Collection Frameworkom:ArrayLists implementiraju List sučelje, čineći ih kompatibilnima s drugim zbirkama klasa u Java Collections Framework. Njegova kompatibilnost omogućuje besprijekornu integraciju s različitim algoritmima i operacijama koje pruža okvir.

Nedostaci:

    Veći troškovi memorije:ArrayLists zahtijevaju dodatnu memoriju za održavanje svoje unutarnje strukture, što rezultira većim opterećenjem memorije u usporedbi s nizovima. To može biti problem kada se radi o velikim zbirkama elemenata.Sporije umetanje i brisanje:Umetanje ili brisanje elemenata u sredini ArrayList zahtijeva pomicanje elemenata, što može biti dugotrajno za velike popise. U scenarijima u kojima se očekuju česte operacije umetanja ili brisanja, druge strukture podataka poput LinkedList mogu ponuditi bolje performanse.Ograničena izvedba za pretraživanje:Traženje elementa u nerazvrstanom ArrayList-u zahtijeva ponavljanje preko elemenata dok se ne pronađe podudaranje. To je pristup linearnom pretraživanju koji rezultira sporijom izvedbom pretraživanja u usporedbi s podatkovnim strukturama optimiziranim za pretraživanje, kao što su HashSet ili TreeMap.Nema podrške za primitivni tip:ArrayLists mogu samo pohranjivati ​​objekte i ne podržavaju izravno primitivne tipove podataka poput int ili char. Za pohranjivanje primitivnih tipova potrebno je koristiti klase omotača kao što su Integer ili Character, što dovodi do potencijalnih troškova automatskog pakiranja i raspakiranja.

Funkcije:

graditelj nizova
    Stvaranje ArrayList-a:Deklarirajte i inicijalizirajte ArrayList pomoću klase ArrayList i navedite tip elementa unutar uglastih zagrada.Dodavanje elemenata:Upotrijebite metodu add za dodavanje elemenata na kraj ArrayList-a.Pristup elementima:Upotrijebite tehniku ​​dobivanja za dohvaćanje cijene detalja na odabranom indeksu.Modificirajući elementi:Ažurirajte cijenu detalja na određeni indeks za korištenje postavljenog pristupa.Pronalaženje veličine:Upotrijebite metodu dimenzija da biste dobili najsuvremeniju količinu faktora u ArrayList.Uklanjanje elemenata:Upotrijebite pristup uklanjanja za brisanje pojedinosti na određenom indeksu ili pružanjem reference objekta.Iteracija kroz ArrayList:Koristite petlje za ponavljanje svakog elementa u ArrayList i izvođenje operacija na njima.

Implementacija:

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

Izlaz:

 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) Povezani popis:

Povezani popis je linearna struktura podataka u kojoj su elementi pohranjeni u zasebnim objektima koji se nazivaju čvorovi. Referentna veza na sljedeći čvor u nizu uključena je u podatkovni element svakog čvora. Posljednji čvor popisa povezuje se s nullom, što označava da je popis završio.

Za razliku od nizova, povezani popisi ne zahtijevaju kontinuiranu dodjelu memorije. Svaki čvor na povezanom popisu može se dodijeliti neovisno, što omogućuje dinamičku dodjelu memorije i učinkovite operacije umetanja i brisanja.

Prednosti:

    Dinamička veličina:LinkedList može dinamički rasti ili se smanjivati, što ga čini prikladnim za različite ili nepoznate veličine podataka.Učinkovito umetanje i brisanje:Umetanje ili brisanje elemenata unutar LinkedList-a učinkovito je jer ne zahtijeva pomicanje elemenata.Nema zahtjeva za neprekidnom memorijom:LinkedList ne treba kontinuiranu dodjelu memorije, što ga čini fleksibilnim i prikladnim za nepredvidive memorijske situacije.Jednostavna izmjena:LinkedList omogućuje jednostavnu modifikaciju elemenata promjenom referentnih pokazivača, omogućujući učinkovitu manipulaciju.

Nedostaci:

    Sporiji nasumični pristup:LinkedList ima sporiji nasumični pristup jer zahtijeva prelaženje popisa za pristup elementima prema indeksu.Povećano opterećenje memorije:LinkedList zahtijeva dodatnu memoriju za reference i čvorove, povećavajući opterećenje memorije u usporedbi s nizovima.Neučinkovito pretraživanje:LinkedList ima sporije operacije pretraživanja, zahtijevajući sekvencijalno ponavljanje da bi se pronašli određeni elementi.

Funkcije:

    Stvaranje LinkedList-a:Deklarirajte i inicijalizirajte LinkedList pomoću klase LinkedList.Dodavanje elemenata:Upotrijebite metodu add za dodavanje elemenata na kraj LinkedList-a.Pristup elementima:Koristite metodu get za dohvaćanje vrijednosti elementa na određenom indeksu.Modificirajući elementi:Ažurirajte vrijednost elementa na određenom indeksu pomoću metode skupa.Uklanjanje elemenata:Koristite metodu uklanjanja za brisanje elementa na određenom indeksu ili pružanjem reference objekta.

Implementacija:

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

Izlaz:

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

Načelo zadnji ušao prvi izašao (LIFO) nalaže da je element koji je posljednji umetnut također prvi uklonjen. Stog je linearna struktura podataka koja slijedi ovo pravilo. Koristi naredbe 'push' i 'pop' za dodavanje elemenata u hrpu i, sukladno tome, uklanjanje gornjeg elementa iz hrpe. Tehnika 'peek' dodatno omogućuje pristup gornjem elementu bez njegovog uklanjanja.

Značajke snopa:

    LIFO ponašanje:Posljednji element gurnut na hrpu je prvi koji će iskočiti, što ga čini prikladnim za primjene u kojima je važan redoslijed umetanja i uklanjanja.Ograničen pristup:Stogovi obično pružaju ograničeni pristup elementima. Možete pristupiti samo najvišem elementu, a da biste došli do drugih elemenata, morate iskočiti elemente iznad njih.Dinamička veličina:Stogovi se mogu implementirati korištenjem nizova ili povezanih popisa, što omogućuje dinamičku veličinu. Po potrebi mogu rasti ili se smanjivati ​​tijekom rada.

Prednosti:

    Jednostavnost:Stogove je lako razumjeti i implementirati.Učinkovitost:Operacije umetanja i brisanja imaju vremensku složenost od O(1).Upravljanje pozivima funkcija:Stogovi učinkovito upravljaju pozivima funkcija i pohranom varijabli.Funkcija poništavanja/ponavljanja:Skupovi omogućuju poništavanje i ponavljanje operacija u aplikacijama.

Nedostaci:

    Ograničen pristup:Pristup elementima ograničen je na vrh hrpe.Ograničenja veličine:Stogovi mogu imati ograničenja veličine ovisno o implementaciji.Nije prikladno za sve scenarije:Skupovi su specifični za LIFO ponašanje i možda nisu prikladni u drugim slučajevima.

Implementacija:

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

Izlaz:

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

5) Red čekanja:

Red čekanja je linearna struktura podataka u Javi koja slijedi načelo prvi ušao prvi izašao (FIFO). Predstavlja skup elemenata gdje se elementi umeću straga i uklanjaju sprijeda.

Značajke:

    Stavi u red:Dodavanje elementa na kraj reda čekanja.Isključi iz reda:Uklanjanje elementa s početka reda čekanja.Zaviriti:Dohvatite element na početku reda bez njegovog uklanjanja.Veličina:Određivanje broja elemenata u redu čekanja.Prazan ček:Provjera je li red čekanja prazan.

Prednosti:

    FIFO ponašanje:Elementi se obrađuju redoslijedom umetanja, čime se osigurava očuvanje izvornog slijeda.Učinkovito umetanje i uklanjanje:Dodavanje i uklanjanje elemenata iz reda brzo je i ima konstantnu vremensku složenost od O(1).Sinkronizacija:Java pruža sinkronizirane implementacije čekanja, što ih čini sigurnima za istovremeno programiranje.Standardizirano sučelje:Sučelje Queue u Javi nudi zajednički skup metoda, omogućujući jednostavnu zamjenjivost između različitih implementacija reda čekanja.

Nedostaci:

    Nema slučajnog pristupa:Redovi čekanja ne podržavaju izravan pristup elementima u sredini. Pristup određenim pozicijama zahtijeva uklanjanje prethodnih elemenata iz reda čekanja.Ograničena veličina:Neke implementacije reda čekanja imaju fiksnu veličinu ili kapacitet, što dovodi do prekoračenja ili iznimaka kada se prekorači maksimalna veličina.Neučinkovito pretraživanje:Traženje elementa u redu zahtijeva uklanjanje iz reda dok se ne pronađe podudaranje, što rezultira linearnim pretraživanjem s potencijalno visokom vremenskom složenošću.

Implementacija:

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

Izlaz:

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

6) HashMap:

HashMap je podatkovna struktura u Javi koja pruža način za pohranjivanje i dohvaćanje parova ključ-vrijednost. Dio je Java Collections Frameworka i implementiran je na temelju strukture podataka hash tablice.

Funkcije:

    stavi(ključ, vrijednost):Umeće navedeni par ključ-vrijednost u HashMap.dobiti (ključ):Dohvaća vrijednost pridruženu navedenom ključu.sadržiKljuč(ključ):Provjerava sadrži li HashMap navedeni ključ.sadržiVrijednost(vrijednost):Provjerava sadrži li HashMap navedenu vrijednost.ukloniti (ključ):Uklanja par ključ-vrijednost povezan s navedenim ključem iz HashMapa.veličina():Vraća broj parova ključ-vrijednost u HashMapu.prazno je():Provjerava je li HashMap prazan.ključSet():Vraća skup koji sadrži sve ključeve u HashMapu.vrijednosti():Vraća zbirku koja sadrži sve vrijednosti u HashMapu.čisto():Uklanja sve parove ključ-vrijednost iz HashMapa.

Prednosti:

    Učinkovito pronalaženje:HashMap omogućuje brzo dohvaćanje vrijednosti na temelju ključeva s konstantnom vremenskom složenošću O(1).Fleksibilno uparivanje ključa i vrijednosti:HashMap dopušta bilo koji objekt koji nije null kao ključ, omogućujući prilagođeno definirane ključeve za pohranjivanje i dohvaćanje podataka.Dinamička veličina:HashMap može dinamički rasti ili se smanjivati ​​kako bi obradio različite količine podataka.Kompatibilnost s Java Collections Frameworkom:HashMap implementira sučelje Map, omogućujući besprijekornu integraciju s drugim klasama zbirke.

Nedostaci:

    Nedostatak naručivanja:HashMap ne čuva redoslijed elemenata. Koristite LinkedHashMap ili TreeMap za specifične zahtjeve naručivanja.Povećano opterećenje memorije:HashMap zahtijeva dodatnu memoriju za hash kodove i unutarnju strukturu u usporedbi s jednostavnijim strukturama podataka.Sporija iteracija:Iteracija preko HashMap-a može biti sporija u usporedbi s nizovima ili popisima zbog prelaska temeljne hash tablice.

Implementacija:

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

Izlaz:

 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 je podatkovna struktura u Javi koja implementira Set sučelje i pohranjuje elemente u hash tablicu.

Značajke:

    Pohranjuje jedinstvene elemente:HashSet ne dopušta duplicirane elemente. Svaki element u HashSet-u je jedinstven.Koristi traženje temeljeno na hash-u:HashSet koristi hash vrijednost svakog elementa za određivanje njegove lokacije za pohranu, pružajući učinkovito pronalaženje elemenata.Nesređena zbirka:Elementi u HashSet-u nisu pohranjeni određenim redoslijedom. Redoslijed elemenata može se mijenjati tijekom vremena.

Prednosti:

    Brzo traženje elementa:HashSet pruža brze operacije traženja, čineći učinkovitu provjeru postoji li element u skupu.Nema dupliciranih elemenata:HashSet automatski obrađuje duplicirane elemente i osigurava da je svaki element jedinstven.Integracija s Java Collections Frameworkom:HashSet implementira Set sučelje, čineći ga kompatibilnim s drugim klasama zbirke u Java Collections Framework.

Nedostaci:

djelomična ovisnost
    Nema zajamčene narudžbe:HashSet ne održava redoslijed elemenata. Ako je redoslijed elemenata važan, HashSet nije prikladan.Bez indeksiranja:HashSet ne omogućuje izravno indeksiranje ili pozicioni pristup elementima. Da biste pristupili elementima, morate iterirati po skupu.Veći troškovi memorije:HashSet zahtijeva dodatnu memoriju za pohranu hash vrijednosti i održavanje strukture hash tablice, što rezultira većim korištenjem memorije u usporedbi s nekim drugim podatkovnim strukturama.

Implementacija:

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

Izlaz:

 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 je implementacija sučelja SortedSet u Javi koja koristi samo-balansirajuće binarno stablo pretraživanja koje se naziva crveno-crno stablo za pohranjivanje elemenata poredanim redoslijedom.

Prednosti:

    Poredani redoslijed:TreeSet automatski održava elemente poredanim redoslijedom na temelju njihovog prirodnog redoslijeda ili prilagođenog usporednika. Omogućuje učinkovito pretraživanje i dohvaćanje elemenata u uzlaznom ili silaznom redoslijedu.Nema duplikata elemenata:TreeSet ne dopušta duplikate elemenata. Osigurava da je svaki element u skupu jedinstven, što može biti korisno u scenarijima u kojima treba izbjegavati duple vrijednosti.Učinkovite operacije:TreeSet pruža učinkovite operacije poput umetanja, brisanja i pretraživanja. Ove operacije imaju vremensku složenost O(log n), gdje je n broj elemenata u skupu.Operacije navigacijskog skupa:TreeSet pruža dodatne navigacijske metode, kao što su above(), lower(), strop() i floor(), koje vam omogućuju da pronađete elemente koji su veći od, manji od ili jednaki zadanoj vrijednosti.

Nedostaci:

    Općenito:TreeSet zahtijeva dodatnu memoriju za pohranjivanje unutarnje strukture podataka, što može dovesti do veće količine memorije u usporedbi s drugim implementacijama skupa.Sporije umetanje i uklanjanje:Operacije umetanja i uklanjanja u TreeSet uključuju održavanje poredanog redoslijeda elemenata, što može zahtijevati restrukturiranje stabla. Može učiniti te operacije malo sporijima u usporedbi s HashSet-om ili LinkedHashSet-om.Ograničeno prilagođavanje:TreeSet je prvenstveno dizajniran za prirodno naručivanje ili pojedinačni prilagođeni komparator. Možda će trebati više fleksibilnosti za više kriterija sortiranja ili složenu logiku sortiranja.

Funkcije:

dfs algoritam
    dodati (element):Dodaje element u TreeSet zadržavajući poredani poredak.ukloniti (element):Uklanja navedeni element iz TreeSeta.sadrži (element):Provjerava sadrži li TreeSet navedeni element.veličina():Vraća broj elemenata u TreeSet-u.prvi():Vraća prvi (najniži) element u TreeSet.posljednji():Vraća zadnji (najviši) element u TreeSet.viši (element):Vraća najmanji element u TreeSet-u koji je striktno veći od danog elementa.donji (element):Vraća najveći element u TreeSet koji je striktno manji od danog elementa.

Implementacija:

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

Izlaz:

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

9) TreeMap:

TreeMap je klasa u Javi koja implementira sučelje Map i pruža sortirano mapiranje ključa i vrijednosti na temelju prirodnog redoslijeda ključeva ili prilagođenog komparatora.

Prednosti:

    Razvrstani poredak:TreeMap održava ključeve sortiranim redoslijedom, što omogućuje učinkovito pretraživanje, dohvaćanje i operacije temeljene na rasponu.Mapiranje ključa i vrijednosti:TreeMap pohranjuje parove ključ-vrijednost, omogućujući učinkovito traženje i dohvaćanje vrijednosti na temelju pridruženih ključeva.Implementacija crveno-crnog stabla:TreeMap interno koristi uravnoteženo binarno stablo pretraživanja (crveno-crno stablo), osiguravajući učinkovite performanse čak i za velike skupove podataka.Podrška za prilagođene komparatore:TreeMap omogućuje korištenje prilagođenih komparatora za definiranje redoslijeda sortiranja ključeva, pružajući fleksibilnost u kriterijima sortiranja.

Nedostaci:

    Opterećenje memorije:TreeMap zahtijeva dodatnu memoriju za pohranu unutarnje strukture stabla i povezanih objekata, što rezultira većim korištenjem memorije u usporedbi s jednostavnijim podatkovnim strukturama poput HashMapa.Sporije umetanje i brisanje:Operacije umetanja i brisanja u TreeMap imaju vremensku složenost od O(log n) zbog potrebe za restrukturiranjem stabla, što ih čini sporijima u usporedbi s HashMap ili LinkedHashMap.Ograničena izvedba za nerazvrstane podatke:TreeMap radi učinkovito za sortirane podatke, ali njegova izvedba može opasti kada se radi s nesortiranim podacima ili čestim izmjenama, budući da zahtijeva održavanje sortiranog redoslijeda.

Funkcije:

    stavi(ključ, vrijednost):Umeće par ključ-vrijednost u TreeMap.dobiti (ključ):Dohvaća vrijednost pridruženu navedenom ključu.sadržiKljuč(ključ):Provjerava sadrži li TreeMap određeni ključ.ukloniti (ključ):Uklanja par ključ-vrijednost povezan s navedenim ključem.veličina():Vraća broj parova ključ-vrijednost u TreeMap.ključSet():Vraća skup svih ključeva u TreeMap.vrijednosti():Vraća kolekciju svih vrijednosti u TreeMap.unosSet():Vraća skup parova ključ-vrijednost u TreeMap.

Implementacija:

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

Izlaz:

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

Grafovi su strukture podataka koje predstavljaju skup međusobno povezanih čvorova ili vrhova. Sastoje se od vrhova i rubova, pri čemu vrhovi predstavljaju entitete, a rubovi odnose između tih entiteta.

Prednosti:

    Svestranost:Grafikoni mogu predstavljati širok raspon scenarija iz stvarnog svijeta, što ih čini prikladnima za različite primjene kao što su društvene mreže, transportni sustavi i računalne mreže.Predstavljanje odnosa:Grafovi pružaju prirodan način predstavljanja odnosa i veza između entiteta, omogućujući učinkovitu analizu i prolazak kroz te odnose.Učinkovito pretraživanje i prelaženje:Algoritmi grafova kao što su pretraživanje prvo u širinu (BFS) i pretraživanje prvo u dubinu (DFS) omogućuju učinkovito prelaženje i pretraživanje vrhova i rubova grafa.Modeliranje složenih odnosa:Grafovi mogu modelirati složene odnose, uključujući hijerarhijske strukture, cikličke ovisnosti i višestruke veze između entiteta.

Nedostaci:

    Složenost prostora:Grafovi mogu zauzeti značajnu količinu memorije, osobito grafovi velikih razmjera s mnogo vrhova i bridova.Složenost operacija:Određene operacije grafa, poput pronalaženja najkraćeg puta ili otkrivanja ciklusa, mogu imati visoku vremensku složenost, osobito u gustim grafovima.Poteškoće u održavanju:Izmjena ili ažuriranje grafikona može biti složeno jer promjene u strukturi grafikona mogu utjecati na njegovu povezanost i postojeće algoritme.

Implementacija:

Naziv datoteke: 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) Drvo:

Stablo je široko korištena podatkovna struktura u računalnoj znanosti koja predstavlja hijerarhijsku strukturu. Sastoji se od čvorova povezanih rubovima, pri čemu svaki čvor može imati nula ili više podređenih čvorova.

Prednosti:

    Hijerarhijska struktura:Stabla pružaju prirodan način predstavljanja hijerarhijskih odnosa, poput sustava datoteka, organizacijskih dijagrama ili HTML/XML dokumenata.Učinkovito pretraživanje:Binarna stabla pretraživanja omogućuju učinkovito pretraživanje s vremenskom složenošću od O(log n), što ih čini prikladnima za pohranu i dohvaćanje sortiranih podataka.Brzo umetanje i brisanje:Strukture podataka stabla nude učinkovite operacije umetanja i brisanja, posebno kada su uravnotežene, kao što su AVL stabla ili crveno-crna stabla.Naručena iteracija:Obilaženje stablom binarnog pretraživanja prema redoslijedu daje elemente sortiranim redoslijedom, što je korisno za zadatke poput ispisa elemenata poredanim redoslijedom ili pronalaženja sljedećeg/prethodnog elementa.

Nedostaci:

    Visoki troškovi memorije:Stabla zahtijevaju dodatnu memoriju za pohranjivanje referenci čvorova ili pokazivača, što može rezultirati većim korištenjem memorije u usporedbi s linearnim podatkovnim strukturama poput nizova ili popisa.Složena implementacija:Implementacija i održavanje strukture podataka stabla može biti složenije u usporedbi s drugim strukturama podataka poput nizova ili popisa, posebno za uravnotežene varijante stabla.Ograničene operacije:Neke varijante stabla, poput stabala binarnog pretraživanja, ne podržavaju učinkovite operacije poput pronalaženja k-tog najmanjeg elementa ili pronalaženja ranga elementa.

Funkcije:

    Umetanje:Dodajte novi čvor stablu.Brisanje:Uklonite čvor iz stabla.Traži:Pronađite određeni čvor ili element u stablu.Prolazak:Krećite se stablom različitim redoslijedom, kao što je redoslijed, prednarudžba ili naknadna narudžba.Visina/dubina:Izračunajte visinu ili dubinu stabla.Stanje:Osigurajte da stablo ostane uravnoteženo kako bi održalo učinkovit rad.

Implementacija:

Naziv datoteke: 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)>