logo

Datu struktūras Java

Daudzos veidus, kā datus var sakārtot, saglabāt un apstrādāt datorprogrammā, Java sauc par datu struktūrām. Šīs struktūras piedāvā metodisku metodi datu efektīvai apstrādei un pārvaldībai, nodrošinot tādas noderīgas darbības kā ievietošana, dzēšana, izguve un šķērsošana.

Rakstā tiks izpētīts viss, kas saistīts ar Java datu struktūrām, un tas palīdz iesācējiem viegli un efektīvi saprast.

  • Kas ir Java?
  • Kas ir Java datu struktūras?
  • Datu struktūru veidi Java
  • Java datu struktūru priekšrocības
  • Datu struktūru klasifikācija
  • Datu struktūras Java FAQ

Kas ir Java?

Java ir populāra objektorientēta programmēšanas valoda, kas ir slavena ar savu plašo standarta bibliotēkas un platformas brīvību. Tā piedāvā stabilu arhitektūru, lai izveidotu programmas, kas darbojas bez atkārtotas kompilācijas dažādās platformās. Labi pazīstamajā Java bibliotēkā ir dažādas ierakstu sistēmas, kas ļauj efektīvi apstrādāt daudzus datu tipus.

Kas ir Java datu struktūras?

Datu organizēšanas un glabāšanas veids datorprogrammas atmiņā ir cieši atkarīgs no Java ierakstu struktūrām. Labi pazīstamajā Java bibliotēkā ir iekļauts ievērojams iebūvēto statistikas struktūru veids. Dažas no ierakstu sistēmām, kas programmētājiem ļauj īsus un vienkāršus veidus, kā saglabāt un sakārtot datus, ietver savienotos sarakstus, skursteņus, rindas un masīvus. Izstrādātāji var ātri veikt tādas darbības kā ievietošana, dzēšana, meklēšana un kārtošana, jo tie nodrošina dažādus mehānismus, lai piekļūtu datiem, tos mainītu un pārvaldītu. Izmantojot šīs datu struktūras, Java programmētāji var samazināt atmiņas izmantošanu un ievērojami palielināt savu programmu kopējo efektivitāti.

Datu struktūru veidi Java

Tālāk ir norādīts Java datu struktūru saraksts

  1. Masīvi
  2. ArrayList
  3. LinkedList
  4. Kaudze
  5. Rinda
  6. HashMap
  7. HashSet
  8. TreeSet
  9. TreeMap
  10. Grafiks
  11. Koks

Zemāk redzamā diagramma skaidri izskaidro Java datu struktūru veidus.

Datu struktūras Java

Papildu datu struktūru veidu klasifikācija:

Ir divu veidu datu struktūras: -

  1. Primitīvās datu struktūras
  2. Neprimitīvas datu struktūras

1) Primitīvās datu struktūras: Šie ir pamata iebūvētie datu tipi, kas pazīstami arī kā primitīvie datu tipi. Tajos ietilpst:

    Baits:Saglabā veselus skaitļus no -128 līdz 127.īss:Saglabā veselus skaitļus no -32 768 līdz 32 767.int:Saglabā veselus skaitļus no -2 147 483 648 līdz 2 147 483 647.peldēt:Saglabā peldošā komata skaitļus ar vienu precizitāti.zīme:Saglabā atsevišķas rakstzīmes.Būla:Saglabā patiesas vai nepatiesas vērtības.garš:Saglabā lielus veselus skaitļus.Dubultā:Peldošā faktora skaitļus saglabā ar dubultu precizitāti.

2) Neprimitīvas datu struktūras: Neprimitīvās ierakstu struktūras ir sarežģītākas un sastāv no primitīvām informācijas šķirnēm. Turklāt tos var iedalīt divos veidos:

    Lineārās datu struktūras:Lineārās datu struktūrās elementi ir sakārtoti lineāri vai secīgi. Piemēri:
      Masīvi:Identisku elementu grupa, kas ievietota masīvā saskaņā ar iepriekš noteiktu izkārtojumu.Kaudzītes:Struktūra Last-In-First-Out (LIFO), kurā var pievienot vai noņemt tikai augšējos vienumus.Astes:FIFO (First-In-First-Out) struktūras tiek izmantotas rindās, kur preces tiek ievietotas atdotajā un izņemtas priekšpusē.Saistītais saraksts:Saistītajā sarakstā ir sīkrīku kolekcija, ko dēvē par mezgliem, un katrā no tiem ir atsauce uz mezglu aiz tā un statistika tajā.
    Nelineāras datu struktūras:Nelineārās datu struktūrās elementi ir sakārtoti nesecīgi. Piemēri:
      Koki:Koki ir uz mezgliem balstīta hierarhiska struktūra ar saknes mezglu augšpusē un pakārtotiem mezgliem, kas atzarojas no tā. Piemēri ir sarkanmelni koki, AVL koki, binārie meklēšanas koki un binārie koki.Grafiki:Mezglu kopa, kas savienota, izmantojot malas, kur mezgliem var būt jebkurš savienojumu skaits. Grafikus izmanto, lai simbolizētu sarežģītas attiecības starp vienumiem.Kaudze:Specializēta uz koku balstīta struktūra, kurā katram noteiktajam mezglam ir lielāka vai mazāka vērtība nekā tā atvasinājumi, atkarībā no tā, vai tā ir maksimālā vai minimālā kaudze.Hash:Datu struktūras, kas izmanto jaucējfunkciju, lai kartētu atslēgas ar vērtībām. Piemēri ir jaucējkopas un jaucējkartes, kas nodrošina zaļu statistikas izguvi un uzglabāšanu, pamatojoties uz precīzām atslēgām.
Datu struktūras Java

Java datu struktūru priekšrocības

    Efektīva datu organizācija:Datu struktūras nodrošina organizētus veidus, kā uzglabāt un pārvaldīt datus, nodrošinot efektīvas piekļuves, manipulācijas un izguves darbības. Tie optimizē atmiņas izmantošanu un veicina ātrāku algoritmu izpildi.Labāka veiktspēja:Izstrādātāji var uzlabot veiktspēju ātruma un atmiņas izmantošanas ziņā, izvēloties konkrētai darbībai piemērotu datu struktūru. Veiktspēja ir optimizēta, jo ir izveidotas īpašas datu struktūras, lai tās varētu izcili veikt noteiktas darbības, piemēram, informācijas meklēšanu, kārtošanu vai ievietošanu.Koda atkārtota izmantošana:Java piedāvā plašu iebūvētu datu struktūru klāstu, kuras programmētājiem ir vienkārši lietot. Šīs atkārtoti lietojamās datu struktūras ietaupa laiku un pūles, novēršot nepieciešamību no jauna izveidot sarežģītus algoritmus.Koda vienkāršība:Datu struktūras padara sarežģītu procesu ieviešanu vienkāršāku kodējamu. Tie piedāvā augsta līmeņa abstrakcijas un iekapsulē datu pārvaldības specifiku, kas uzlabo koda lasāmību, apkopi un skaidrību.Elastība un pielāgošanās spēja:Datu struktūras piedāvā elastību dažāda veida un lieluma datu apstrādē. Tie var dinamiski pielāgoties, lai pielāgotos mainīgajām datu prasībām un nodrošinātu mehānismus efektīvai datu apstrādei.Standartizēts un labi pārbaudīts:Java standarta bibliotēkā ir iebūvētas datu struktūras, kas ir būtiski pārbaudītas un optimizētas, garantējot to uzticamību un veiktspēju. Šo kopīgo datu struktūru izmantošana samazina kļūdu iespējamību un nodrošina lietojumprogrammu izstrādei stabilu pamatu.Mērogojamība:Datu struktūras nodrošina mērogojamības iespējas, ļaujot lietojumprogrammām efektīvi apstrādāt lielu datu apjomu. Tie var dinamiski augt vai sarukt atkarībā no datu lieluma, nodrošinot optimālu veiktspēju pat pieaugot datu pieprasījumam.Algoritma dizains:Datu struktūrām ir izšķiroša nozīme algoritmu izstrādē un analīzē. Tie nodrošina pamatā esošo struktūru un darbības, kas nepieciešamas dažādu algoritmu ieviešanai un sarežģītu problēmu risināšanai.

1) Masīvi:

Masīvs ir pamata un bieži izmantota datu struktūra Java datu struktūru kontekstā. Tā piedāvā fiksēta izmēra identiska tipa komponentu kolekcijas glabāšanas metodi. Tā kā masīvi nodrošina ātru un ērtu piekļuvi elementiem atkarībā no to indeksa, tie ir būtisks rīks datu pārvaldīšanai un organizēšanai.

Priekšrocības:

    Datu organizācija:Masīvi nodrošina strukturētu veidu, kā uzglabāt un sakārtot elementus, uzlabojot datu pārvaldību.Brīvpiekļuve:Elementiem var piekļūt tieši, izmantojot to indeksu, kas ļauj efektīvi izgūt un modificēt.Fiksēts izmērs:Masīviem ir iepriekš noteikts izmērs, kas nodrošina efektīvu atmiņas piešķiršanu.Homogēni elementi:Masīvi glabā viena veida elementus, nodrošinot datu konsekvenci un vienkāršojot darbības.Iterācija:Masīvi atbalsta vienkāršu elementu iterāciju, atvieglojot pārvietošanos un apstrādi.Šķirošana un meklēšana:Masīvi labi darbojas ar šķirošanas un meklēšanas algoritmiem, piedāvājot efektīvas darbības.Atmiņas efektivitāte:Masīvi optimizē atmiņas izmantošanu, saglabājot elementus blakus esošajos reģionos.Saderība:Masīvus plaši atbalsta Java, padarot tos saderīgus ar dažādiem ietvariem un rīkiem.

Trūkumi:

    Fiksēts izmērs:Masīvu izmērus nevar dinamiski mainīt, tāpēc, lai mainītu izmērus, ir nepieciešama atjaunošana.Atmiņas zudums:Neizmantotie elementi lielākos masīvos var izraisīt atmiņas zudumu.Ievietošanas un dzēšanas izmaksas:Lai ievietotu vai dzēstu elementus masīva vidū, ir jāpārvieto nākamie elementi, kā rezultātā rodas neefektivitāte.Elastības trūkums:Masīviem ir stingri datu tipi, un tajos nevar ievietot dažādu veidu datus bez papildu masīviem vai datu struktūrām.

Funkcijas:

    Masīva izveide:Deklarējiet un inicializējiet masīvu ar noteiktu izmēru, izmantojot masīva veidu un jauno atslēgvārdu.Piekļuve elementiem:Izmantojiet indeksu, lai piekļūtu atsevišķiem masīva elementiem.Modificētie elementi:Atjauniniet elementa vērtību, piešķirot jaunu vērtību noteiktam indeksam masīvā.Meklēšanas garums:Izmantojiet atribūtu garums, lai noteiktu masīva garumu.Iterācija caur masīvu:Izmantojiet cilpas, lai izietu cauri katram masīva elementam un izpildītu

Īstenošana:

Faila nosaukums: 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:

Java ArrayList ir dinamiska datu struktūra, kas ļauj uzglabāt un manipulēt ar elementiem. Tā ir daļa no Java Collections Framework un tiek ieviesta, izmantojot masīvu iekšēji.

Priekšrocības:

    Dinamiskais izmērs:Atšķirībā no masīviem, ArrayLists var dinamiski palielināties vai samazināties pēc elementu pievienošanas vai noņemšanas. Tas novērš nepieciešamību manuāli mainīt izmērus un ļauj ērti apstrādāt dažādus datu apjomus.Vienkārša elementu manipulācija:ArrayLists piedāvā metodes, kā pievienot, noņemt un modificēt elementus jebkurā saraksta pozīcijā. Tā elastība vienkāršo tādas izplatītas darbības kā ievietošana, dzēšana un atjaunināšana, padarot elementu manipulācijas efektīvākas.Brīvpiekļuve:ArrayLists atbalsta nejaušu piekļuvi elementiem, izmantojot to indeksu, ļaujot ātri izgūt un mainīt elementus noteiktās pozīcijās sarakstā. Tas atvieglo efektīvu piekļuvi elementiem un uzlabo vispārējo veiktspēju.Saderība ar Java Collection Framework:ArrayLists ievieš List interfeisu, padarot tos saderīgus ar citām kolekcijas klasēm Java Collections Framework. Tā savietojamība nodrošina nemanāmu integrāciju ar dažādiem ietvara nodrošinātajiem algoritmiem un operācijām.

Trūkumi:

    Lielāka atmiņa:ArrayLists prasa papildu atmiņu, lai saglabātu to iekšējo struktūru, kā rezultātā atmiņa ir lielāka nekā masīviem. Tas var radīt bažas, strādājot ar lielām elementu kolekcijām.Lēnāka ievietošana un dzēšana:Lai ievietotu vai dzēstu elementus ArrayList vidū, ir jāpārvieto elementi, kas var būt laikietilpīgi lieliem sarakstiem. Gadījumos, kad ir paredzētas biežas ievietošanas vai dzēšanas darbības, citas datu struktūras, piemēram, LinkedList, var piedāvāt labāku veiktspēju.Ierobežota veiktspēja meklēšanai:Lai meklētu elementu nešķirotā ArrayList sarakstā, ir jāveic elementu atkārtošana, līdz tiek atrasta atbilstība. Tā ir lineāra meklēšanas pieeja, kas nodrošina lēnāku meklēšanas veiktspēju, salīdzinot ar meklēšanai optimizētām datu struktūrām, piemēram, HashSet vai TreeMap.Nav primitīvā tipa atbalsta:ArrayLists var uzglabāt tikai objektus un tieši neatbalsta tādus primitīvus datu tipus kā int vai char. Lai saglabātu primitīvus veidus, ir jāizmanto tādas iesaiņojuma klases kā Vesels skaitlis vai Rakstzīme, kas var izraisīt automātiskās kastes un izpakošanas izmaksas.

Funkcijas:

saraksta mezgls java
    ArrayList izveide:Deklarējiet un inicializējiet ArrayList, izmantojot klasi ArrayList, un norādiet elementa veidu leņķa iekavās.Elementu pievienošana:Izmantojiet pievienošanas metodi, lai pievienotu elementus ArrayList beigās.Piekļuve elementiem:Izmantojiet iegūšanas paņēmienu, lai izgūtu detaļu cenu atlasītajā indeksā.Modificētie elementi:Atjauniniet detaļu izmaksas noteiktā rādītājā, lai izmantotu iestatīto pieeju.Meklēšanas izmērs:Izmantojiet dimensiju metodi, lai iegūtu visprogresīvāko faktoru skaitu ArrayList.Elementu noņemšana:Izmantojiet noņemšanas pieeju, lai dzēstu detaļu noteiktā rādītājā vai sniedzot objekta atsauci.Iterēšana, izmantojot ArrayList:Izmantojiet cilpas, lai atkārtotu katru ArrayList elementu un veiktu ar tiem darbības.

Īstenošana:

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

Izvade:

 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) Saistītais saraksts:

Saistītais saraksts ir lineāra datu struktūra, kurā elementi tiek glabāti atsevišķos objektos, ko sauc par mezgliem. Atsauces saite uz nākamo secības mezglu ir iekļauta katra mezgla datu elementā. Saraksta pēdējais mezgls ir saistīts ar nulli, norādot, ka saraksts ir beidzies.

Atšķirībā no masīviem, saistītiem sarakstiem nav nepieciešama blakus esoša atmiņas piešķiršana. Katru saistītā saraksta mezglu var piešķirt neatkarīgi, nodrošinot dinamisku atmiņas piešķiršanu un efektīvas ievietošanas un dzēšanas darbības.

Priekšrocības:

    Dinamiskais izmērs:LinkedList var dinamiski augt vai sarukt, padarot to piemērotu dažādiem vai nezināmiem datu lielumiem.Efektīva ievietošana un dzēšana:Elementu ievietošana vai dzēšana LinkedList ir efektīva, jo tai nav nepieciešami elementi.Bez blakus esošās atmiņas prasības:LinkedList nav nepieciešama blakus esoša atmiņas piešķiršana, padarot to elastīgu un piemērotu neparedzamām atmiņas situācijām.Viegla modifikācija:LinkedList ļauj viegli modificēt elementus, mainot atsauces norādes, nodrošinot efektīvu manipulāciju.

Trūkumi:

    Lēnāka brīvpiekļuve:LinkedList ir lēnāka nejauša piekļuve, jo tai ir jāšķērso saraksts, lai piekļūtu elementiem pēc indeksa.Palielināta atmiņa:LinkedList ir nepieciešama papildu atmiņa atsaucēm un mezgliem, palielinot atmiņas apjomu salīdzinājumā ar masīviem.Neefektīva meklēšana:LinkedList ir lēnākas meklēšanas darbības, tāpēc, lai atrastu konkrētus elementus, ir nepieciešama secīga iterācija.

Funkcijas:

bināro koku piemēri
    LinkedList izveide:Deklarējiet un inicializējiet LinkedList, izmantojot klasi LinkedList.Elementu pievienošana:Izmantojiet pievienošanas metodi, lai pievienotu elementus LinkedList beigās.Piekļuve elementiem:Izmantojiet iegūšanas metodi, lai izgūtu elementa vērtību noteiktā indeksā.Modificētie elementi:Atjauniniet elementa vērtību noteiktā indeksā, izmantojot iestatīto metodi.Elementu noņemšana:Izmantojiet noņemšanas metodi, lai dzēstu elementu noteiktā indeksā vai norādot objekta atsauci.

Īstenošana:

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

Izvade:

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

Princips Last-In-First-Out (LIFO) nosaka, ka elements, kas tika ievietots pēdējais, ir arī elements, kas tiek noņemts pirmais. Kaudze ir lineāra datu struktūra, kas atbilst šim noteikumam. Tas izmanto komandas 'push' un 'pop', lai pievienotu elementus stekam un attiecīgi noņemtu augšējo elementu no kaudzes. “Peek” tehnika papildus nodrošina piekļuvi augšējam elementam, to nenoņemot.

Kaudzītes īpašības:

    LIFO uzvedība:Pēdējais elements, kas tiek uzspiests uz kaudzes, ir pirmais, kas tiek izmests, padarot to piemērotu lietojumprogrammām, kurās ir svarīga ievietošanas un noņemšanas secība.Ierobežota piekļuve:Stacki parasti nodrošina ierobežotu piekļuvi elementiem. Varat piekļūt tikai augšējam elementam, un, lai sasniegtu citus elementus, elementi ir jāpaceļ virs tiem.Dinamiskais izmērs:Stackus var ieviest, izmantojot masīvus vai saistītos sarakstus, nodrošinot dinamisku izmēru. Tie var augt vai sarukt pēc vajadzības izpildlaikā.

Priekšrocības:

    Vienkāršība:Stackus ir viegli saprast un ieviest.Efektivitāte:Ievietošanas un dzēšanas operāciju laika sarežģītība ir O(1).Funkciju zvanu pārvaldība:Stacks efektīvi pārvalda funkciju izsaukumus un mainīgo krātuvi.Atsaukt/Atcelt funkcionalitāti:Stacks ļauj atsaukt un pārtaisīt darbības lietojumprogrammās.

Trūkumi:

    Ierobežota piekļuve:Piekļuve elementiem ir ierobežota līdz kaudzes augšdaļai.Izmēru ierobežojumi:Stackiem var būt lieluma ierobežojumi atkarībā no ieviešanas.Nav piemērots visiem scenārijiem:Stacki ir specifiski LIFO uzvedībai un var nebūt piemēroti citos gadījumos.

Īstenošana:

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

Izvade:

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

5) Rinda:

Rinda ir Java lineāra datu struktūra, kas atbilst FIFO (First-In-First-Out) principam. Tas attēlo elementu kolekciju, kurā elementi tiek ievietoti aizmugurē un noņemti no priekšpuses.

Iespējas:

    Rinda:Elementa pievienošana rindas aizmugurē.Atkāpties no rindas:Elementa noņemšana no rindas priekšpuses.Ielūkoties:Izgūstiet elementu rindas priekšpusē, to nenoņemot.Izmērs:Elementu skaita noteikšana rindā.Iztukšot čeku:Pārbauda, ​​vai rinda ir tukša.

Priekšrocības:

    FIFO uzvedība:Elementi tiek apstrādāti to ievietošanas secībā, nodrošinot sākotnējās secības saglabāšanu.Efektīva ievietošana un noņemšana:Elementu pievienošana un noņemšana no rindas ir ātra, un tai ir nemainīga laika sarežģītība O(1).Sinhronizācija:Java nodrošina sinhronizētu rindu ieviešanu, padarot tās drošas vienlaicīgai programmēšanai.Standartizēts interfeiss:Java rindas interfeiss piedāvā kopīgu metožu kopu, kas ļauj viegli savstarpēji aizstāt dažādus rindu implementācijas.

Trūkumi:

    Bez brīvpiekļuves:Rindas neatbalsta tiešu piekļuvi elementiem vidū. Lai piekļūtu noteiktām pozīcijām, ir jāatbrīvo iepriekšējie elementi.Ierobežots izmērs:Dažām rindu ieviešanām ir fiksēts lielums vai ietilpība, kas izraisa pārpildīšanu vai izņēmumus, ja tiek pārsniegts maksimālais lielums.Neefektīva meklēšana:Elementa meklēšana rindā ir jāatbrīvo no rindas, līdz tiek atrasta atbilstība, kā rezultātā tiek veikta lineāra meklēšana ar potenciāli augstu laika sarežģītību.

Īstenošana:

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

Izvade:

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

6) HashMap:

HashMap ir Java datu struktūra, kas nodrošina veidu, kā saglabāt un izgūt atslēgu un vērtību pārus. Tā ir daļa no Java Collections Framework un ir ieviesta, pamatojoties uz jaucēj tabulas datu struktūru.

Funkcijas:

    likt(atslēga, vērtība):Ievieto norādīto atslēgas vērtību pāri HashMap.saņemt (atslēga):Izgūst vērtību, kas saistīta ar norādīto atslēgu.saturAtslēga(atslēga):Pārbauda, ​​vai HashMap satur norādīto atslēgu.saturVērtība(vērtība):Pārbauda, ​​vai HashMap satur norādīto vērtību.noņemt (atslēga):No HashMap noņem atslēgas vērtību pāri, kas saistīts ar norādīto atslēgu.Izmērs():Atgriež HashMap atslēgu un vērtību pāru skaitu.ir tukšs():Pārbauda, ​​vai HashMap ir tukša.keySet():Atgriež komplektu, kurā ir visas HashMap atslēgas.vērtības ():Atgriež kolekciju, kurā ir visas HashMap vērtības.skaidrs ():No HashMap noņem visus atslēgu un vērtību pārus.

Priekšrocības:

    Efektīva izguve:HashMap nodrošina ātru vērtību izgūšanu, pamatojoties uz atslēgām ar konstanta laika sarežģītību O(1).Elastīga atslēgas vērtības savienošana pārī:HashMap ļauj izmantot jebkuru objektu, kas nav nulle, kā atslēgu, ļaujot izmantot pielāgotas atslēgas datu glabāšanai un izgūšanai.Dinamiskais izmērs:HashMap var dinamiski augt vai samazināties, lai apstrādātu dažādus datu apjomus.Saderība ar Java Collections Framework:HashMap ievieš kartes interfeisu, ļaujot netraucēti integrēties ar citām kolekcijas klasēm.

Trūkumi:

    Pasūtīšanas trūkums:HashMap nesaglabā elementu secību. Konkrētām pasūtīšanas prasībām izmantojiet LinkedHashMap vai TreeMap.Palielināta atmiņa:HashMap nepieciešama papildu atmiņa jaucējkodiem un iekšējai struktūrai, salīdzinot ar vienkāršākām datu struktūrām.Lēnāka iterācija:Atkārtošana HashMap kartē var būt lēnāka salīdzinājumā ar masīviem vai sarakstiem, jo ​​tiek šķērsota pamatā esošā hash tabula.

Īstenošana:

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

Izvade:

 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 ir Java datu struktūra, kas ievieš Set interfeisu un saglabā elementus hash tabulā.

Iespējas:

    Uzglabā unikālus elementus:HashSet neatļauj dublēt elementus. Katrs HashSet elements ir unikāls.Izmanto uz hash balstītu uzmeklēšanu:HashSet izmanto katra elementa jaucējvērtību, lai noteiktu tā glabāšanas vietu, nodrošinot efektīvu elementu izguvi.Nesakārtota kolekcija:HashSet elementi netiek glabāti noteiktā secībā. Elementu secība laika gaitā var mainīties.

Priekšrocības:

    Ātra elementu meklēšana:HashSet nodrošina ātras uzmeklēšanas darbības, padarot efektīvu pārbaudi, vai komplektā ir kāds elements.Nav elementu dublikātu:HashSet automātiski apstrādā dublētos elementus un nodrošina, ka katrs elements ir unikāls.Integrācija ar Java Collections Framework:HashSet ievieš Set interfeisu, padarot to saderīgu ar citām kolekcijas klasēm Java Collections Framework.

Trūkumi:

kā palaist skriptu operētājsistēmā Linux
    Nav garantēta pasūtījuma:HashSet neuztur elementu secību. Ja elementu secība ir svarīga, HashSet nav piemērota.Bez indeksācijas:HashSet nenodrošina tiešu indeksēšanu vai pozicionālu piekļuvi elementiem. Lai piekļūtu elementiem, jums ir jāatkārto pa kopu.Lielāka atmiņa:HashSet ir nepieciešama papildu atmiņa, lai saglabātu jaucējvērtības un uzturētu jaucēja tabulas struktūru, kā rezultātā ir lielāks atmiņas lietojums salīdzinājumā ar dažām citām datu struktūrām.

Īstenošana:

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

Izvade:

 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 ir Java SortedSet saskarnes ieviešana, kas izmanto pašbalansējošu bināro meklēšanas koku, ko sauc par sarkanmelnu koku, lai saglabātu elementus sakārtotā secībā.

Priekšrocības:

    Šķirotā secība:TreeSet automātiski uztur elementus sakārtotā secībā, pamatojoties uz to dabisko secību vai pielāgotu salīdzinātāju. Tas ļauj efektīvi meklēt un izgūt elementus augošā vai dilstošā secībā.Nav dublētu elementu:TreeSet neatļauj dublēt elementus. Tas nodrošina, ka katrs komplekta elements ir unikāls, kas var būt noderīgi scenārijos, kuros jāizvairās no vērtību dublikātiem.Efektīvas darbības:TreeSet nodrošina efektīvas darbības, piemēram, ievietošanu, dzēšanu un meklēšanu. Šo darbību laika sarežģītība ir O(log n), kur n ir kopas elementu skaits.Navigējamās kopas darbības:TreeSet nodrošina papildu navigācijas metodes, piemēram, augstāks (), zemāks (), griesti () un stāvs (), kas ļauj atrast elementus, kas ir lielāki, mazāki vai vienādi ar doto vērtību.

Trūkumi:

    Pieskaitāmās izmaksas:TreeSet ir nepieciešama papildu atmiņa, lai saglabātu iekšējo datu struktūru, kas var radīt lielāku atmiņas apjomu salīdzinājumā ar citām kopu ieviešanām.Lēnāka ievietošana un noņemšana:Ievietošanas un noņemšanas darbības programmā TreeSet ietver elementu sakārtotās secības uzturēšanu, kas var prasīt koku pārstrukturēšanu. Tas var padarīt šīs darbības nedaudz lēnākas salīdzinājumā ar HashSet vai LinkedHashSet.Ierobežota pielāgošana:TreeSet galvenokārt ir paredzēts dabiskai secībai vai vienam pielāgotam salīdzinājumam. Tam var būt nepieciešama lielāka elastība vairākiem šķirošanas kritērijiem vai sarežģītai šķirošanas loģikai.

Funkcijas:

    pievienot(elements):Pievieno elementu TreeSet, vienlaikus saglabājot sakārtoto secību.noņemt (elements):Noņem norādīto elementu no TreeSet.satur (elementu):Pārbauda, ​​vai TreeSet satur norādīto elementu.Izmērs():Atgriež TreeSet elementu skaitu.pirmais ():Atgriež pirmo (zemāko) elementu TreeSet.Pēdējais():Atgriež pēdējo (augstāko) elementu TreeSet.augstāks(elements):Atgriež mazāko elementu TreeSet, kas ir stingri lielāks par doto elementu.apakšējais (elements):Atgriež TreeSet lielāko elementu, kas ir stingri mazāks par doto elementu.

Īstenošana:

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

Izvade:

 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 ir Java klase, kas ievieš kartes saskarni un nodrošina sakārtotu atslēgu vērtību kartēšanu, pamatojoties uz atslēgu dabisko secību vai pielāgotu salīdzinātāju.

Priekšrocības:

    Šķirotā secība:TreeMap saglabā atslēgas sakārtotā secībā, kas ļauj veikt efektīvu meklēšanu, izguvi un darbības, kas balstītas uz diapazonu.Atslēgas vērtību kartēšana:TreeMap saglabā atslēgu un vērtību pārus, ļaujot efektīvi meklēt un izgūt vērtības, pamatojoties uz saistītajām atslēgām.Sarkanmelnā koka ieviešana:TreeMap iekšēji izmanto sabalansētu bināro meklēšanas koku (Red-Black Tree), nodrošinot efektīvu veiktspēju pat lielām datu kopām.Atbalsts pielāgotajiem salīdzinātājiem:TreeMap ļauj izmantot pielāgotus salīdzinātājus, lai definētu atslēgu šķirošanas secību, nodrošinot elastīgumu šķirošanas kritērijos.

Trūkumi:

    Atmiņa:TreeMap nepieciešama papildu atmiņa, lai saglabātu iekšējo koka struktūru un saistītos objektus, tādējādi palielinot atmiņas lietojumu salīdzinājumā ar vienkāršākām datu struktūrām, piemēram, HashMap.Lēnāka ievietošana un dzēšana:TreeMap ievietošanas un dzēšanas operāciju laika sarežģītība ir O(log n), jo ir nepieciešama koka pārstrukturēšana, padarot tās lēnākas salīdzinājumā ar HashMap vai LinkedHashMap.Ierobežota veiktspēja nešķirotiem datiem:TreeMap efektīvi darbojas kārtotiem datiem, taču tā veiktspēja var pasliktināties, strādājot ar nešķirotiem datiem vai biežas modifikācijas, jo ir jāsaglabā sakārtotā secība.

Funkcijas:

    likt(atslēga, vērtība):TreeMap ievieto atslēgas-vērtības pāri.saņemt (atslēga):Izgūst vērtību, kas saistīta ar norādīto atslēgu.saturAtslēga(atslēga):Pārbauda, ​​vai TreeMap satur noteiktu atslēgu.noņemt (atslēga):Noņem atslēgas vērtību pāri, kas saistīts ar norādīto atslēgu.Izmērs():Atgriež atslēgu un vērtību pāru skaitu TreeMap.keySet():Atgriež visu TreeMap atslēgu kopu.vērtības ():Atgriež visu TreeMap vērtību kolekciju.entrySet():Atgriež atslēgu-vērtību pāru kopu TreeMap.

Īstenošana:

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

Izvade:

10 ml uncēs
 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) Diagramma:

Grafiki ir datu struktūra, kas attēlo savstarpēji saistītu mezglu vai virsotņu kopumu. Tās sastāv no virsotnēm un malām, kur virsotnes apzīmē entītijas, bet malas attēlo attiecības starp šīm entītijām.

Priekšrocības:

    Daudzpusība:Grafiki var attēlot plašu reālās pasaules scenāriju klāstu, padarot tos piemērotus dažādām lietojumprogrammām, piemēram, sociālajiem tīkliem, transporta sistēmām un datortīkliem.Attiecību pārstāvība:Grafiki nodrošina dabisku veidu, kā attēlot attiecības un savienojumus starp entītijām, ļaujot veikt šo attiecību efektīvu analīzi un šķērsošanu.Efektīva meklēšana un pārvietošanās:Grafiku algoritmi, piemēram, platuma meklēšana (BFS) un dziļuma pirmā meklēšana (DFS), ļauj efektīvi pārvietoties un meklēt grafikas virsotnes un malas.Sarežģītu attiecību modelēšana:Grafiki var modelēt sarežģītas attiecības, tostarp hierarhiskas struktūras, cikliskas atkarības un vairākus savienojumus starp entītijām.

Trūkumi:

    Kosmosa sarežģītība:Grafiki var patērēt ievērojamu daudzumu atmiņas, jo īpaši liela mēroga grafiki ar daudzām virsotnēm un malām.Operāciju sarežģītība:Dažām grafiku operācijām, piemēram, īsākā ceļa atrašanai vai ciklu noteikšanai, var būt liela laika sarežģītība, īpaši blīvos grafikos.Apkopes grūtības:Grafika modificēšana vai atjaunināšana var būt sarežģīta, jo izmaiņas grafika struktūrā var ietekmēt tā savienojamību un esošos algoritmus.

Īstenošana:

Faila nosaukums: 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) koks:

Koks ir datorzinātnēs plaši izmantota datu struktūra, kas atspoguļo hierarhisku struktūru. Tas sastāv no mezgliem, kas savienoti ar malām, kur katram mezglam var būt nulle vai vairāk bērnu mezglu.

Priekšrocības:

    Hierarhiskā struktūra:Koki nodrošina dabisku veidu, kā attēlot hierarhiskas attiecības, piemēram, failu sistēmas, organizācijas diagrammas vai HTML/XML dokumentus.Efektīva meklēšana:Binārie meklēšanas koki nodrošina efektīvu meklēšanu ar laika sarežģītību O(log n), padarot tos piemērotus sakārtotu datu glabāšanai un izguvei.Ātra ievietošana un dzēšana:Koku datu struktūras piedāvā efektīvas ievietošanas un dzēšanas darbības, īpaši, ja tās ir līdzsvarotas, piemēram, AVL koki vai sarkani melnie koki.Pasūtītā iterācija:Binārā meklēšanas koka šķērsošana secībā sniedz elementus sakārtotā secībā, kas ir noderīgi tādiem uzdevumiem kā elementu drukāšana sakārtotā secībā vai nākamā/iepriekšējā elementa atrašana.

Trūkumi:

    Augsta atmiņa:Kokiem ir nepieciešama papildu atmiņa, lai saglabātu mezglu atsauces vai norādes, kas var izraisīt lielāku atmiņas lietojumu salīdzinājumā ar lineārām datu struktūrām, piemēram, masīviem vai sarakstiem.Sarežģīta ieviešana:Koka datu struktūras ieviešana un uzturēšana var būt sarežģītāka salīdzinājumā ar citām datu struktūrām, piemēram, masīviem vai sarakstiem, īpaši sabalansētiem koku variantiem.Ierobežotas darbības:Daži koku varianti, piemēram, binārie meklēšanas koki, neatbalsta efektīvas darbības, piemēram, k-tā mazākā elementa atrašanu vai elementa ranga atrašanu.

Funkcijas:

    Ievietošana:Pievienojiet kokam jaunu mezglu.Dzēšana:Noņemiet mezglu no koka.Meklēt:Atrodiet kokā noteiktu mezglu vai elementu.Šķērsošana:Pārvietojiet koku dažādās secībās, piemēram, pēc pasūtījuma, priekšpasūtīšanas vai pēcpasūtīšanas.Augstums/dziļums:Aprēķiniet koka augstumu vai dziļumu.Atlikums:Nodrošiniet, lai koks būtu līdzsvarots, lai nodrošinātu efektīvu darbību.

Īstenošana:

Faila nosaukums: 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)>