logo

Podatkovne strukture v Javi

Številni načini urejanja, shranjevanja in obdelave podatkov v računalniškem programu se v Javi imenujejo podatkovne strukture. Te strukture ponujajo metodično metodo za učinkovito obdelavo in upravljanje podatkov, kar omogoča uporabne operacije, kot so vstavljanje, brisanje, iskanje in prečkanje.

Članek bo raziskal vse, kar je povezano s podatkovnimi strukturami v Javi, in začetnikom pomaga pri preprostem in učinkovitem razumevanju.

  • Kaj je Java?
  • Kaj so podatkovne strukture v Javi?
  • Vrste podatkovnih struktur v Javi
  • Prednosti podatkovnih struktur v Javi
  • Klasifikacija podatkovnih struktur
  • Pogosta vprašanja o podatkovnih strukturah v Javi

Kaj je Java?

Java je priljubljen objektno usmerjen programski jezik, znan po svoji ogromni standardni knjižnici in svobodi platforme. Ponuja trdno arhitekturo za ustvarjanje programov, ki se izvajajo brez ponovnega prevajanja na različnih platformah. Dobro znana knjižnica za Javo ponuja izbiro sistemov zapisov, ki omogočajo učinkovito obravnavo številnih tipov podatkov.

Kaj so podatkovne strukture v Javi?

Način organiziranja in shranjevanja podatkov v pomnilniku računalniškega programa je v veliki meri odvisen od struktur zapisov Java. Dobro znana knjižnica Java vključuje veliko vrsto vgrajenih statističnih struktur. Nekaj ​​sistemov zapisov, ki programerjem omogočajo kratke in preproste načine shranjevanja in urejanja podatkov, vključujejo povezane sezname, sklade, čakalne vrste in polja. Razvijalci lahko hitro izvajajo operacije, kot so vstavljanje, brisanje, iskanje in razvrščanje, ker zagotavljajo vrsto mehanizmov za dostop do podatkov, njihovo spreminjanje in upravljanje. Javanski programerji lahko z uporabo teh podatkovnih struktur zmanjšajo porabo pomnilnika in znatno povečajo splošno učinkovitost svojih programov.

Vrste podatkovnih struktur v Javi

Spodaj je naveden seznam podatkovnih struktur v Javi

  1. Nizi
  2. ArrayList
  3. LinkedList
  4. Stack
  5. Čakalna vrsta
  6. HashMap
  7. HashSet
  8. TreeSet
  9. TreeMap
  10. Graf
  11. Drevo

Spodnji diagram zelo jasno razlaga vrste podatkovnih struktur v Javi.

Podatkovne strukture v Javi

Nadaljnja klasifikacija vrst podatkovnih struktur:

Obstajata dve vrsti podatkovnih struktur: -

  1. Primitivne podatkovne strukture
  2. Neprimitivne podatkovne strukture

1) Primitivne podatkovne strukture: Znani tudi kot primitivni podatkovni tipi, so to osnovni vgrajeni podatkovni tipi v Javi. Vključujejo:

    Bajt:Shranjuje cela števila od -128 do 127.kratek:Shranjuje cela števila od -32.768 do 32.767.int:Shranjuje cela števila od -2.147.483.648 do 2.147.483.647.float:Shranjuje števila s plavajočo vejico z enojno natančnostjo.char:Shranjuje posamezne znake.logično:Shranjuje prave ali napačne vrednosti.dolga:Shranjuje velika cela števila.dvojno:Shranjuje števila s plavajočim faktorjem z dvojno natančnostjo.

2) Neprimitivne podatkovne strukture: Strukture neprimitivnih zapisov so bolj zapletene in so sestavljene iz primitivnih vrst informacij. Poleg tega jih je mogoče razvrstiti v dve vrsti:

    Linearne podatkovne strukture:V linearnih podatkovnih strukturah so elementi razporejeni linearno ali zaporedno. Primeri vključujejo:
      Nizi:Skupina enako tipiziranih elementov, postavljenih v matriko v skladu z vnaprej določeno razporeditvijo.Nizi:Struktura LIFO (Last-In-First-Out), v kateri je mogoče dodati ali odstraniti le najvišje elemente.repi:Strukture FIFO (First-In-First-Out) se uporabljajo v čakalnih vrstah, kjer se predmeti vstavljajo na vrnjeno in vzamejo ven na sprednji strani.Povezan seznam:Povezan seznam obsega zbirko pripomočkov, imenovanih vozlišča, od katerih ima vsako referenco na vozlišče za njim in statistiko v njem.
    Nelinearne podatkovne strukture:V nelinearnih podatkovnih strukturah so elementi razporejeni na nezaporeden način. Primeri vključujejo:
      Drevesa:Drevesa so vrsta hierarhične strukture, ki temelji na vozliščih, s korenskim vozliščem na vrhu in podrejenimi vozlišči, ki se razvejajo iz njega. Primeri vključujejo rdeče-črna drevesa, drevesa AVL, binarna iskalna drevesa in binarna drevesa.Grafi:Niz vozlišč, povezanih z uporabo robov, pri čemer imajo lahko vozlišča poljubno število povezav. Grafi se uporabljajo za simbolizacijo kompleksnih odnosov med predmeti.Kup:Specializirana drevesna struktura, v kateri ima vsako določeno vozlišče večjo ali manjšo vrednost od svojih podrejenih vozlišč, odvisno od tega, ali je največji ali najmanjši kup.Hash:Podatkovne strukture, ki uporabljajo zgoščevalno funkcijo za preslikavo ključev v vrednosti. Primeri so sestavljeni iz naborov zgoščenih vrednosti in zemljevidov zgoščenih vrednosti, ki zagotavljajo zeleno pridobivanje in shranjevanje statističnih podatkov na podlagi natančnih ključev.
Podatkovne strukture v Javi

Prednosti podatkovnih struktur v Javi

    Učinkovita organizacija podatkov:Podatkovne strukture zagotavljajo organizirane načine za shranjevanje in upravljanje podatkov, kar omogoča učinkovit dostop, manipulacijo in operacije iskanja. Optimizirajo uporabo pomnilnika in omogočajo hitrejše izvajanje algoritmov.Boljša zmogljivost:Razvijalci lahko izboljšajo zmogljivost v smislu hitrosti in izkoriščenosti pomnilnika tako, da izberejo primerno strukturo podatkov za določeno dejavnost. Zmogljivost je optimizirana, ker so posebne podatkovne strukture narejene tako, da se odlikujejo pri določenih dejanjih, kot je iskanje, razvrščanje ali vstavljanje informacij.Ponovna uporabnost kode:Java ponuja široko paleto vgrajenih podatkovnih struktur, ki jih programerji preprosto uporabljajo. Te podatkovne strukture za večkratno uporabo prihranijo čas in trud, saj odpravljajo potrebo po ustvarjanju prefinjenih algoritmov iz nič.Preprostost kode:Podatkovne strukture olajšajo izvajanje zapletenih procesov za kodiranje. Ponujajo visokonivojske abstrakcije in zajemajo posebnosti upravljanja podatkov, kar izboljša berljivost, vzdržljivost in jasnost kode.Fleksibilnost in prilagodljivost:Podatkovne strukture ponujajo prilagodljivost pri ravnanju z različnimi vrstami in velikostmi podatkov. Lahko se dinamično prilagajajo spreminjajočim se zahtevam po podatkih in zagotavljajo mehanizme za učinkovito manipulacijo podatkov.Standardizirano in dobro preizkušeno:Standardna knjižnica za Javo vsebuje vgrajene podatkovne strukture, ki so bile podvržene obsežnemu testiranju in optimizaciji, kar zagotavlja njihovo zanesljivost in zmogljivost. Uporaba teh skupnih podatkovnih struktur zmanjša možnost napak in daje razvoju aplikacij trdne temelje.Razširljivost:Podatkovne strukture zagotavljajo možnosti razširljivosti, kar aplikacijam omogoča učinkovito obdelavo velikih količin podatkov. Lahko se dinamično povečajo ali zmanjšajo glede na velikost podatkov, kar zagotavlja optimalno delovanje tudi pri naraščajočih zahtevah po podatkih.Oblikovanje algoritma:Podatkovne strukture so ključne pri načrtovanju in analizi algoritmov. Zagotavljajo osnovno strukturo in operacije, potrebne za izvajanje različnih algoritmov in reševanje kompleksnih problemov.

1) Nizi:

Matrika je osnovna in pogosto uporabljena podatkovna struktura v kontekstu podatkovnih struktur Jave. Ponuja metodo shranjevanja zbirke komponent enakega tipa s fiksno velikostjo. Ker zagotavljajo hiter in enostaven dostop do elementov glede na njihov indeks, so polja ključno orodje za upravljanje in organiziranje podatkov.

Prednosti:

    Organizacija podatkov:Nizi zagotavljajo strukturiran način za shranjevanje in organiziranje elementov, kar izboljšuje upravljanje podatkov.Naključni dostop:Do elementov je mogoče dostopati neposredno z njihovim indeksom, kar omogoča učinkovito iskanje in spreminjanje.Fiksna velikost:Nizi imajo vnaprej določeno velikost, kar omogoča učinkovito dodeljevanje pomnilnika.Homogeni elementi:Matrike shranjujejo elemente iste vrste, kar zagotavlja konsistentnost podatkov in poenostavlja operacije.Ponovitev:Nizi podpirajo enostavno ponavljanje skozi elemente, kar olajša prehod in obdelavo.Razvrščanje in iskanje:Nizi dobro delujejo z algoritmi za razvrščanje in iskanje ter ponujajo učinkovite operacije.Učinkovitost pomnilnika:Nizi optimizirajo uporabo pomnilnika s shranjevanjem elementov v sosednjih regijah.Kompatibilnost:Nizi so široko podprti v Javi, zaradi česar so združljivi z različnimi ogrodji in orodji.

Slabosti:

    Fiksna velikost:Matrikam ni mogoče dinamično spreminjati velikosti, zato je za spremembe velikosti potrebna rekreacija.Poraba pomnilnika:Neuporabljeni elementi v večjih nizih lahko povzročijo izgubo pomnilnika.Stroški vstavljanja in brisanja:Vstavljanje ali brisanje elementov na sredino matrike zahteva premikanje naslednjih elementov, kar povzroči neučinkovitost.Pomanjkanje prilagodljivosti:Nizi imajo toge vrste podatkov in ne morejo sprejeti različnih vrst podatkov brez dodatnih nizov ali podatkovnih struktur.

Funkcije:

    Ustvarjanje matrike:Deklarirajte in inicializirajte matriko z določeno velikostjo z uporabo vrste matrike in nove ključne besede.Dostop do elementov:Za dostop do posameznih elementov v matriki uporabite indeks.Spreminjanje elementov:Posodobite vrednost elementa tako, da določenemu indeksu v matriki dodelite novo vrednost.Iskanje dolžine:Za določitev dolžine matrike uporabite atribut dolžine.Ponavljanje skozi matriko:Uporabite zanke za prehod skozi vsak element v matriki in izvedbo

Izvedba:

Ime 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 v Javi je dinamična podatkovna struktura, ki omogoča shranjevanje in manipulacijo elementov. Je del ogrodja zbirk Java in je implementiran z interno uporabo polja.

Prednosti:

    Dinamična velikost:Za razliko od nizov lahko seznami ArrayLists dinamično rastejo ali se zmanjšujejo, ko se elementi dodajajo ali odstranjujejo. Odpravlja potrebo po ročnem spreminjanju velikosti in omogoča priročno rokovanje z različnimi količinami podatkov.Enostavna manipulacija elementov:ArrayLists ponujajo metode za dodajanje, odstranjevanje in spreminjanje elementov na katerem koli mestu znotraj seznama. Njegova prilagodljivost poenostavlja običajne operacije, kot so vstavljanje, brisanje in posodabljanje, zaradi česar je manipulacija elementov učinkovitejša.Naključni dostop:ArrayLists podpirajo naključni dostop do elementov z uporabo njihovega indeksa, kar omogoča hitro iskanje in spreminjanje elementov na določenih mestih znotraj seznama. Omogoča učinkovit dostop do elementov in izboljša splošno delovanje.Združljivost z Java Collection Framework:ArrayLists izvajajo vmesnik List, zaradi česar so združljivi z drugimi razredi zbirk v ogrodju zbirk Java. Njegova združljivost omogoča brezhibno integracijo z različnimi algoritmi in operacijami, ki jih zagotavlja ogrodje.

Slabosti:

    Večji stroški pomnilnika:ArrayLists potrebujejo dodaten pomnilnik, da ohranijo svojo notranjo strukturo, kar ima za posledico večjo porabo pomnilnika v primerjavi z nizi. To je lahko zaskrbljujoče, ko imate opravka z velikimi zbirkami elementov.Počasnejše vstavljanje in brisanje:Vstavljanje ali brisanje elementov na sredino seznama ArrayList zahteva premikanje elementov, kar je pri velikih seznamih lahko zamudno. V scenarijih, kjer se pričakujejo pogoste operacije vstavljanja ali brisanja, lahko druge podatkovne strukture, kot je LinkedList, nudijo boljšo zmogljivost.Omejena uspešnost za iskanje:Iskanje elementa v nerazvrščenem seznamu ArrayList zahteva ponavljanje elementov, dokler se ne najde ujemanje. Gre za pristop linearnega iskanja, ki povzroči počasnejše iskanje v primerjavi s podatkovnimi strukturami, optimiziranimi za iskanje, kot sta HashSet ali TreeMap.Brez podpore za primitivni tip:ArrayLists lahko shranjujejo samo objekte in ne podpirajo neposredno primitivnih tipov podatkov, kot sta int ali char. Za shranjevanje primitivnih tipov je treba uporabiti razrede ovoja, kot sta Integer ali Character, kar vodi do morebitnih stroškov samodejnega pakiranja in razpakiranja.

Funkcije:

numpy ničle
    Ustvarjanje seznama ArrayList:Deklarirajte in inicializirajte ArrayList z uporabo razreda ArrayList in podajte tip elementa v oglatih oklepajih.Dodajanje elementov:Uporabite metodo add za dodajanje elementov na konec seznama ArrayList.Dostop do elementov:Uporabite tehniko pridobivanja, da pridobite ceno podrobnosti na izbranem indeksu.Spreminjanje elementov:Posodobite stroške podrobnosti pri določenem indeksu za uporabo nastavljenega pristopa.Velikost iskanja:Uporabite metodo dimenzij, da dobite najsodobnejšo količino faktorjev v ArrayList.Odstranjevanje elementov:Uporabite pristop odstranitve, da izbrišete podrobnost na določenem indeksu ali prek zagotavljanja reference objekta.Ponavljanje skozi ArrayList:Uporabite zanke za ponavljanje vsakega elementa v seznamu ArrayList in izvajanje operacij na njih.

Izvedba:

Ime 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); } } } 

Izhod:

primer java do while
 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) Povezan seznam:

Povezani seznam je linearna podatkovna struktura, v kateri so elementi shranjeni v ločenih objektih, imenovanih vozlišča. Referenčna povezava do naslednjega vozlišča v zaporedju je vključena v podatkovni element vsakega vozlišča. Končno vozlišče seznama je povezano z ničelno, kar pomeni, da se je seznam končal.

Za razliko od nizov povezani seznami ne zahtevajo neprekinjenega dodeljevanja pomnilnika. Vsako vozlišče na povezanem seznamu je mogoče dodeliti neodvisno, kar omogoča dinamično dodeljevanje pomnilnika ter učinkovite operacije vstavljanja in brisanja.

Prednosti:

    Dinamična velikost:LinkedList lahko dinamično raste ali krči, zaradi česar je primeren za različne ali neznane velikosti podatkov.Učinkovito vstavljanje in brisanje:Vstavljanje ali brisanje elementov v LinkedList je učinkovito, saj ne zahteva premikanja elementov.Ni zahteve po neprekinjenem pomnilniku:LinkedList ne potrebuje neprekinjenega dodeljevanja pomnilnika, zaradi česar je prilagodljiv in primeren za nepredvidljive pomnilniške situacije.Enostavna sprememba:LinkedList omogoča enostavno spreminjanje elementov s spreminjanjem referenčnih kazalcev, kar omogoča učinkovito manipulacijo.

Slabosti:

    Počasnejši naključni dostop:LinkedList ima počasnejši naključni dostop, saj zahteva prečkanje seznama za dostop do elementov po indeksu.Povečana poraba pomnilnika:LinkedList zahteva dodaten pomnilnik za reference in vozlišča, kar povečuje pomnilniške stroške v primerjavi z nizi.Neučinkovito iskanje:LinkedList ima počasnejše iskalne operacije, ki zahtevajo zaporedno ponavljanje za iskanje določenih elementov.

Funkcije:

    Ustvarjanje LinkedList:Deklarirajte in inicializirajte LinkedList z uporabo razreda LinkedList.Dodajanje elementov:Uporabite metodo add za dodajanje elementov na konec seznama LinkedList.Dostop do elementov:Za pridobitev vrednosti elementa na določenem indeksu uporabite metodo get.Spreminjanje elementov:Posodobite vrednost elementa pri določenem indeksu z uporabo metode set.Odstranjevanje elementov:Uporabite metodo odstranitve, da izbrišete element na določenem indeksu ali tako, da navedete referenco objekta.

Izvedba:

Ime 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); } } 

Izhod:

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

Načelo LIFO (Last-In-First-Out) narekuje, da je element, ki je bil nazadnje vstavljen, tudi element, ki je prvi odstranjen. Sklad je linearna podatkovna struktura, ki sledi temu pravilu. Uporablja ukaza 'push' in 'pop' za dodajanje elementov v sklad in s tem odstranitev zgornjega elementa iz sklada. Tehnika 'peek' dodatno omogoča dostop do zgornjega elementa, ne da bi ga odstranili.

Značilnosti sklada:

    Vedenje LIFO:Zadnji element, ki je potisnjen na sklad, je prvi, ki izskoči, zaradi česar je primeren za aplikacije, kjer je pomemben vrstni red vstavljanja in odstranjevanja.Omejen dostop:Skladi običajno zagotavljajo omejen dostop do elementov. Dostopate lahko le do najvišjega elementa, če želite doseči druge elemente, morate izstreliti elemente nad njimi.Dinamična velikost:Sklade je mogoče implementirati z uporabo nizov ali povezanih seznamov, kar omogoča dinamično velikost. Med delovanjem lahko po potrebi rastejo ali se skrčijo.

Prednosti:

    Enostavnost:Skladi so enostavni za razumevanje in implementacijo.Učinkovitost:Operacije vstavljanja in brisanja imajo časovno zahtevnost O(1).Upravljanje klicev funkcij:Skladi učinkovito upravljajo klice funkcij in shranjevanje spremenljivk.Funkcionalnost razveljavi/ponovi:Skladi omogočajo razveljavitev in ponovitev operacij v aplikacijah.

Slabosti:

    Omejen dostop:Dostop do elementov je omejen na vrh sklada.Omejitve velikosti:Skladi imajo lahko omejitve velikosti, odvisno od izvedbe.Ni primerno za vse scenarije:Skladi so specifični za vedenje LIFO in morda niso primerni v drugih primerih.

Izvedba:

Ime 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); } } } 

Izhod:

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

5) Čakalna vrsta:

Čakalna vrsta je linearna podatkovna struktura v Javi, ki sledi načelu FIFO (First-In-First-Out). Predstavlja zbirko elementov, kjer se elementi vstavljajo zadaj in odstranjujejo spredaj.

Lastnosti:

    V čakalno vrsto:Dodajanje elementa na zadnji del čakalne vrste.Odstranitev iz čakalne vrste:Odstranjevanje elementa s čela čakalne vrste.Pokukaj:Pridobite element na začetku čakalne vrste, ne da bi ga odstranili.Velikost:Določanje števila elementov v čakalni vrsti.Prazen ček:Preverjanje, ali je čakalna vrsta prazna.

Prednosti:

    Vedenje FIFO:Elementi se obdelujejo po vrstnem redu njihovega vstavljanja, kar zagotavlja ohranitev prvotnega zaporedja.Učinkovito vstavljanje in odstranjevanje:Dodajanje in odstranjevanje elementov iz čakalne vrste je hitro in ima konstantno časovno zahtevnost O(1).Sinhronizacija:Java zagotavlja sinhronizirane izvedbe čakalnih vrst, zaradi česar so varne za sočasno programiranje.Standardiziran vmesnik:Vmesnik Queue v Javi ponuja skupen nabor metod, kar omogoča preprosto zamenljivost med različnimi izvedbami čakalnih vrst.

Slabosti:

    Brez naključnega dostopa:Čakalne vrste ne podpirajo neposrednega dostopa do elementov na sredini. Dostop do določenih položajev zahteva odstranitev predhodnih elementov iz vrste.Omejena velikost:Nekatere izvedbe čakalnih vrst imajo fiksno velikost ali zmogljivost, kar vodi do prelivanja ali izjem, ko presežete največjo velikost.Neučinkovito iskanje:Iskanje elementa v čakalni vrsti zahteva odstranitev iz vrste, dokler se ne najde ujemanje, kar ima za posledico linearno iskanje s potencialno visoko časovno zapletenostjo.

Izvedba:

Ime 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); } } } 

Izhod:

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

6) HashMap:

HashMap je podatkovna struktura v Javi, ki omogoča shranjevanje in pridobivanje parov ključ-vrednost. Je del ogrodja zbirk Java in je implementiran na podlagi podatkovne strukture zgoščene tabele.

Funkcije:

    postavi (ključ, vrednost):Vstavi podani par ključ-vrednost v HashMap.pridobi (ključ):Pridobi vrednost, povezano s podanim ključem.vsebujeKey(ključ):Preveri, ali HashMap vsebuje navedeni ključ.vsebujeVrednost(vrednost):Preveri, ali HashMap vsebuje navedeno vrednost.odstrani (ključ):Odstrani par ključ-vrednost, povezan z navedenim ključem iz HashMap.velikost():Vrne število parov ključ-vrednost v HashMap.je prazno():Preveri, ali je HashMap prazen.keySet():Vrne nabor, ki vsebuje vse ključe v HashMap.vrednote():Vrne zbirko, ki vsebuje vse vrednosti v HashMap.počisti():Odstrani vse pare ključ-vrednost iz HashMap.

Prednosti:

    Učinkovito iskanje:HashMap omogoča hitro iskanje vrednosti na podlagi ključev s konstantno časovno kompleksnostjo O(1).Prilagodljivo združevanje ključa in vrednosti:HashMap dovoljuje kateri koli predmet, ki ni ničelni, kot ključ, kar omogoča po meri definirane ključe za shranjevanje in pridobivanje podatkov.Dinamična velikost:HashMap lahko dinamično poveča ali zmanjša velikost za obdelavo različnih količin podatkov.Združljivost z Java Collections Framework:HashMap implementira vmesnik Map, ki omogoča brezhibno integracijo z drugimi razredi zbirke.

Slabosti:

    Pomanjkanje naročila:HashMap ne ohranja vrstnega reda elementov. Za posebne zahteve glede naročanja uporabite LinkedHashMap ali TreeMap.Povečana poraba pomnilnika:HashMap zahteva dodaten pomnilnik za zgoščene kode in notranjo strukturo v primerjavi s preprostejšimi podatkovnimi strukturami.Počasnejša ponovitev:Ponavljanje po HashMap je lahko počasnejše v primerjavi z nizi ali seznami zaradi prečkanja temeljne zgoščene tabele.

Izvedba:

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

Izhod:

 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 v Javi, ki implementira vmesnik Set in shranjuje elemente v zgoščevalni tabeli.

Lastnosti:

    Shranjuje edinstvene elemente:HashSet ne dovoljuje podvojenih elementov. Vsak element v HashSet je edinstven.Uporablja iskanje na podlagi zgoščene vrednosti:HashSet uporablja zgoščeno vrednost vsakega elementa, da določi njegovo lokacijo shranjevanja, kar zagotavlja učinkovito iskanje elementov.Neurejena zbirka:Elementi v HashSet niso shranjeni v določenem vrstnem redu. Vrstni red elementov se lahko sčasoma spremeni.

Prednosti:

    Hitro iskanje elementov:HashSet zagotavlja hitre operacije iskanja, zaradi česar je učinkovito preverjanje, ali element obstaja v nizu.Ni podvojenih elementov:HashSet samodejno obravnava podvojene elemente in zagotavlja, da je vsak element edinstven.Integracija z Java Collections Framework:HashSet implementira vmesnik Set, zaradi česar je združljiv z drugimi razredi zbirk v ogrodju zbirk Java.

Slabosti:

npr. uporabniško ime
    Ni zajamčenega naročila:HashSet ne vzdržuje vrstnega reda elementov. Če je vrstni red elementov pomemben, HashSet ni primeren.Brez indeksiranja:HashSet ne zagotavlja neposrednega indeksiranja ali pozicijskega dostopa do elementov. Za dostop do elementov morate iterirati po nizu.Večji stroški pomnilnika:HashSet potrebuje dodaten pomnilnik za shranjevanje zgoščenih vrednosti in vzdrževanje strukture zgoščene tabele, kar ima za posledico večjo porabo pomnilnika v primerjavi z nekaterimi drugimi podatkovnimi strukturami.

Izvedba:

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

Izhod:

 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 vmesnika SortedSet v Javi, ki za shranjevanje elementov v razvrščenem vrstnem redu uporablja samouravnotežno binarno iskalno drevo, imenovano rdeče-črno drevo.

Prednosti:

    Vrstni red:TreeSet samodejno vzdržuje elemente v razvrščenem vrstnem redu na podlagi njihovega naravnega vrstnega reda ali primerjalnika po meri. Omogoča učinkovito iskanje in priklic elementov v naraščajočem ali padajočem vrstnem redu.Brez podvojenih elementov:TreeSet ne dovoljuje podvojenih elementov. Zagotavlja, da je vsak element v naboru edinstven, kar je lahko koristno v scenarijih, kjer se je treba izogniti podvojenim vrednostim.Učinkovite operacije:TreeSet zagotavlja učinkovite operacije, kot so vstavljanje, brisanje in iskanje. Te operacije imajo časovno kompleksnost O(log n), kjer je n število elementov v nizu.Operacije navigacijskega niza:TreeSet ponuja dodatne navigacijske metode, kot so višje(), nižje(), strop() in pod(), ki vam omogočajo, da poiščete elemente, ki so večji od, manjši od ali enaki dani vrednosti.

Slabosti:

    režijski stroški:TreeSet potrebuje dodaten pomnilnik za shranjevanje notranje podatkovne strukture, kar lahko privede do večjih stroškov pomnilnika v primerjavi z drugimi implementacijami nabora.Počasnejše vstavljanje in odstranjevanje:Operacije vstavljanja in odstranjevanja v TreeSet vključujejo vzdrževanje razvrščenega vrstnega reda elementov, kar lahko zahteva prestrukturiranje drevesa. Lahko naredi te operacije nekoliko počasnejše v primerjavi s HashSet ali LinkedHashSet.Omejeno prilagajanje:TreeSet je zasnovan predvsem za naravno razvrščanje ali en sam primerjalnik po meri. Morda potrebuje več prilagodljivosti za več kriterijev razvrščanja ali zapleteno logiko razvrščanja.

Funkcije:

    dodaj (element):Doda element v TreeSet in hkrati ohrani razvrščeni vrstni red.odstrani (element):Odstrani navedeni element iz TreeSet.vsebuje (element):Preveri, ali TreeSet vsebuje navedeni element.velikost():Vrne število elementov v TreeSet.prvi():Vrne prvi (najnižji) element v TreeSet.zadnji():Vrne zadnji (najvišji) element v TreeSet.višji (element):Vrne najmanjši element v TreeSet, ki je strogo večji od danega elementa.spodnji (element):Vrne največji element v TreeSet, ki je strogo manjši od danega elementa.

Izvedba:

Ime 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); } } } 

Izhod:

 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 razred v Javi, ki implementira vmesnik Map in zagotavlja razvrščeno preslikavo ključa in vrednosti na podlagi naravnega vrstnega reda ključev ali primerjalnika po meri.

Prednosti:

    Razvrščeno vrstni red:TreeMap ohranja ključe v razvrščenem vrstnem redu, kar omogoča učinkovito iskanje, iskanje in operacije na podlagi obsega.Preslikava ključa in vrednosti:TreeMap shranjuje pare ključ-vrednost, kar omogoča učinkovito iskanje in pridobivanje vrednosti na podlagi povezanih ključev.Izvedba rdeče-črnega drevesa:TreeMap interno uporablja uravnoteženo binarno iskalno drevo (Red-Black Tree), kar zagotavlja učinkovito delovanje tudi za velike nabore podatkov.Podpora za primerjalnike po meri:TreeMap omogoča uporabo primerjalnikov po meri za določanje vrstnega reda ključev, kar zagotavlja prilagodljivost pri kriterijih razvrščanja.

Slabosti:

    Dodatni stroški pomnilnika:TreeMap potrebuje dodaten pomnilnik za shranjevanje notranje drevesne strukture in povezanih objektov, kar ima za posledico večjo porabo pomnilnika v primerjavi s preprostejšimi podatkovnimi strukturami, kot je HashMap.Počasnejše vstavljanje in brisanje:Operacije vstavljanja in brisanja v TreeMap imajo časovno zahtevnost O(log n) zaradi potrebe po prestrukturiranju drevesa, zaradi česar so počasnejše v primerjavi s HashMap ali LinkedHashMap.Omejena zmogljivost za nerazvrščene podatke:TreeMap deluje učinkovito pri razvrščenih podatkih, vendar se lahko njegova zmogljivost poslabša pri obravnavanju nerazvrščenih podatkov ali pogostih spremembah, saj zahteva vzdrževanje razvrščenega vrstnega reda.

Funkcije:

    postavi (ključ, vrednost):V TreeMap vstavi par ključ-vrednost.pridobi (ključ):Pridobi vrednost, povezano s podanim ključem.vsebujeKey(ključ):Preveri, ali TreeMap vsebuje določen ključ.odstrani (ključ):Odstrani par ključ-vrednost, povezan z navedenim ključem.velikost():Vrne število parov ključ-vrednost v TreeMap.keySet():Vrne niz vseh ključev v TreeMap.vrednote():Vrne zbirko vseh vrednosti v TreeMap.vnosSet():Vrne niz parov ključ-vrednost v TreeMap.

Izvedba:

Ime 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); } } } 

Izhod:

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

Grafi so podatkovne strukture, ki predstavljajo zbirko med seboj povezanih vozlišč ali oglišč. Sestavljeni so iz oglišč in robov, kjer oglišča predstavljajo entitete, robovi pa odnose med temi entitetami.

Prednosti:

    Vsestranskost:Grafi lahko predstavljajo široko paleto scenarijev iz resničnega sveta, zaradi česar so primerni za različne aplikacije, kot so družbena omrežja, transportni sistemi in računalniška omrežja.Predstavitev odnosa:Grafi zagotavljajo naraven način za predstavitev odnosov in povezav med entitetami, kar omogoča učinkovito analizo in prečkanje teh odnosov.Učinkovito iskanje in prečkanje:Algoritmi grafov, kot sta iskanje najprej v širino (BFS) in iskanje najprej v globino (DFS), omogočajo učinkovito prečkanje in iskanje vozlišč in robov grafa.Modeliranje zapletenih odnosov:Grafi lahko modelirajo zapletene odnose, vključno s hierarhičnimi strukturami, cikličnimi odvisnostmi in več povezavami med entitetami.

Slabosti:

    Kompleksnost prostora:Grafi lahko porabijo veliko količino pomnilnika, še posebej obsežni grafi s številnimi vozlišči in robovi.Kompleksnost operacij:Nekatere operacije grafov, kot je iskanje najkrajše poti ali zaznavanje ciklov, so lahko zelo časovno zapletene, zlasti v gostih grafih.Težave pri vzdrževanju:Spreminjanje ali posodabljanje grafa je lahko zapleteno, saj lahko spremembe v strukturi grafa vplivajo na njegovo povezljivost in obstoječe algoritme.

Izvedba:

Ime datoteke: GraphExample.java

dolgo do int 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) Drevo:

Drevo je široko uporabljena podatkovna struktura v računalništvu, ki predstavlja hierarhično strukturo. Sestavljen je iz vozlišč, povezanih z robovi, pri čemer ima lahko vsako vozlišče nič ali več podrejenih vozlišč.

Prednosti:

    Hierarhična struktura:Drevesa zagotavljajo naraven način za predstavitev hierarhičnih odnosov, kot so datotečni sistemi, organigrami ali dokumenti HTML/XML.Učinkovito iskanje:Binarna iskalna drevesa omogočajo učinkovito iskanje s časovno kompleksnostjo O(log n), zaradi česar so primerna za shranjevanje in pridobivanje razvrščenih podatkov.Hitro vstavljanje in brisanje:Drevesne podatkovne strukture ponujajo učinkovite operacije vstavljanja in brisanja, zlasti če so uravnotežene, kot so drevesa AVL ali rdeče-črna drevesa.Naročena ponovitev:Prehod binarnega iskalnega drevesa po vrstnem redu daje elemente v razvrščenem vrstnem redu, kar je koristno za naloge, kot je tiskanje elementov v razvrščenem vrstnem redu ali iskanje naslednjega/prejšnjega elementa.

Slabosti:

    Visoki stroški pomnilnika:Drevesa potrebujejo dodaten pomnilnik za shranjevanje referenc vozlišč ali kazalcev, kar lahko povzroči večjo porabo pomnilnika v primerjavi z linearnimi podatkovnimi strukturami, kot so polja ali seznami.Kompleksna izvedba:Izvajanje in vzdrževanje drevesne podatkovne strukture je lahko bolj zapleteno v primerjavi z drugimi podatkovnimi strukturami, kot so polja ali seznami, zlasti za uravnotežene drevesne različice.Omejene operacije:Nekatere različice dreves, kot so binarna iskalna drevesa, ne podpirajo učinkovitih operacij, kot je iskanje k-tega najmanjšega elementa ali iskanje ranga elementa.

Funkcije:

    Vstavljanje:V drevo dodajte novo vozlišče.Izbris:Odstranite vozlišče iz drevesa.Iskanje:Poiščite določeno vozlišče ali element v drevesu.Prehod:Prečkajte drevo v različnih vrstnih redih, na primer po vrstnem redu, pred naročilom ali po naročilu.Višina/globina:Izračunajte višino ali globino drevesa.Ravnovesje:Zagotovite, da drevo ostane uravnoteženo, da ohranite učinkovito delovanje.

Izvedba:

Ime 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)>