logo

Структуре података у Јави

Бројни начини на које се подаци могу распоредити, сачувати и руковати у оквиру рачунарског програма називају се структурама података у Јави. Ове структуре нуде методичан метод за ефикасно руковање и управљање подацима, омогућавајући корисне операције као што су уметање, брисање, преузимање и прелазак.

Чланак ће истражити све што је у вези са структурама података у Јави, и помаже почетницима да разумеју лако и ефикасно.

  • Шта је Јава?
  • Шта су структуре података у Јави?
  • Типови структура података у Јави
  • Предности структура података у Јави
  • Класификација структура података
  • Често постављана питања о структурама података у Јави

Шта је Јава?

Јава је популаран објектно оријентисани програмски језик познат по својој огромној стандардној библиотеци и слободи платформе. Нуди солидну архитектуру за креирање програма који раде без поновне компилације на различитим платформама. Добро позната библиотека за Јаву има избор система записа који је чине изводљивим да се ефикасно носи са бројним типовима података.

Шта су структуре података у Јави?

Начин на који су подаци организовани и ускладиштени у меморији рачунарског програма уско се ослања на структуре Јава записа. Јава добро позната библиотека укључује значајан тип уграђених статистичких структура. Неки од система записа који дозвољавају програмерима кратке и једноставне начине да сачувају и распореде податке укључују повезане листе, стекове, редове и низове. Програмери могу брзо да изврше операције као што су уметање, брисање, претраживање и сортирање јер обезбеђују низ механизама за добијање приступа, мењање и управљање подацима. Јава програмери могу смањити употребу меморије и значајно повећати укупну ефикасност својих програма коришћењем ових структура података.

Типови структура података у Јави

Доле је наведена листа структура података у Јави

  1. Низови
  2. Низ листа
  3. ЛинкедЛист
  4. Гомила
  5. Куеуе
  6. ХасхМап
  7. ХасхСет
  8. ТрееСет
  9. ТрееМап
  10. Граф
  11. Дрво

Дијаграм у наставку јасно објашњава типове структура података у Јави врло јасно.

Структуре података у Јави

Даља класификација типова структура података:

Постоје две врсте структура података: -

  1. Примитивне структуре података
  2. Непримитивне структуре података

1) Примитивне структуре података: Такође познати као примитивни типови података, ово су основни уграђени типови података у Јави. То укључује:

    бајт:Чува целе бројеве од -128 до 127.кратак:Чува целе бројеве од -32,768 до 32,767.инт:Чува целе бројеве од -2,147,483,648 до 2,147,483,647.пловак:Чува бројеве са покретним зарезом са једном прецизношћу.цхар:Чува појединачне знакове.боолеан:Чува истините или лажне вредности.дуго:Чува велике целе бројеве.Двоструко:Чува бројеве са плутајућим фактором са двоструком прецизношћу.

2) Непримитивне структуре података: Непримитивне структуре записа су сложеније и састављене су од примитивних врста информација. Поред тога, могу се категорисати у две врсте:

    Линеарне структуре података:У линеарним структурама података, елементи су распоређени линеарно или секвенцијално. Примери укључују:
      Низови:Група идентично типованих елемената смештених у низ према унапред одређеном распореду.Стацкс:Структура Ласт-Ин-Фирст-Оут (ЛИФО) у којој се могу додати или уклонити само највише ставке.репови:ФИФО структуре се користе у редовима, где се ставке убацују на враћене и ваде на предњој страни.Повезана листа:Повезана листа садржи колекцију гаџета који се називају чворови, од којих сваки има референцу на чвор иза себе и статистику унутар њега.
    Нелинеарне структуре података:У нелинеарним структурама података, елементи су распоређени на несеквенционалан начин. Примери укључују:
      Дрвеће:Стабла су тип хијерархијске структуре засноване на чворовима, са коренским чвором на врху и подређеним чворовима који се гранају из њега. Примери укључују црвено-црна стабла, АВЛ стабла, стабла бинарног претраживања и бинарна стабла.Графикони:Скуп чворова повезаних коришћењем ивица, при чему чворови могу имати било коју количину веза. Графикони се користе да симболизују сложене односе међу ставкама.Гомила:Специјализована структура заснована на стаблу у којој сваки утврђени чвор има вредност већу или мању од својих потомака, ослањајући се на то да ли је то максимална или минимална хрпа.хеш:Структуре података које користе хеш функцију за мапирање кључева у вредности. Примери се састоје од хеш скупова и хеш мапа, које обезбеђују зелено преузимање и складиштење статистике на основу прецизних кључева.
Структуре података у Јави

Предности структура података у Јави

    Ефикасна организација података:Структуре података обезбеђују организоване начине складиштења и управљања подацима, омогућавајући ефикасан приступ, манипулацију и операције преузимања. Они оптимизују употребу меморије и олакшавају брже извршавање алгоритама.Боље перформансе:Програмери могу да побољшају перформансе у смислу брзине и коришћења меморије тако што ће изабрати одговарајућу структуру података за одређену активност. Перформансе су оптимизоване јер су специфичне структуре података направљене тако да се истичу у одређеним радњама као што су претраживање, сортирање или уметање информација.Поновна употреба кода:Јава нуди широк спектар уграђених структура података које су једноставне за употребу за програмере. Ове структуре података за вишекратну употребу штеде време и труд тако што уклањају потребу за креирањем софистицираних алгоритама од нуле.Једноставност кода:Структуре података чине имплементацију компликованих процеса једноставнијом за кодирање. Они нуде апстракције високог нивоа и обухватају специфичности управљања подацима, што побољшава читљивост, могућност одржавања и јасноћу кода.Флексибилност и прилагодљивост:Структуре података нуде флексибилност у руковању различитим типовима и величинама података. Они се могу динамички прилагођавати како би се прилагодили променљивим захтевима за подацима и обезбедили механизме за ефикасну манипулацију подацима.Стандардизовано и добро тестирано:Стандардна библиотека за Јаву садржи уграђене структуре података које су прошле значајно тестирање и оптимизацију, што гарантује њихову поузданост и перформансе. Коришћење ових уобичајених структура података смањује могућност грешака и даје развоју апликација чврсту основу.Прилагодљивост:Структуре података пружају опције скалабилности, омогућавајући апликацијама да ефикасно рукују великим количинама података. Они могу динамички да расту или да се смањују на основу величине података, обезбеђујући оптималне перформансе чак и са све већим захтевима за подацима.Дизајн алгоритма:Структуре података су кључне у дизајну и анализи алгоритама. Они пружају основну структуру и операције неопходне за имплементацију различитих алгоритама и решавање сложених проблема.

1) Низови:

Низ је основна и често коришћена структура података у контексту Јавиних структура података. Нуди метод чувања колекције фиксне величине компоненти идентичног типа. Пошто обезбеђују брз и лак приступ елементима у зависности од њиховог индекса, низови су кључни алат за управљање и организовање података.

Предности:

    Организација података:Низови пружају структуриран начин складиштења и организовања елемената, побољшавајући управљање подацима.Директног приступа:Елементима се може приступити директно користећи њихов индекс, што омогућава ефикасно проналажење и модификацију.Фиксна величина:Низови имају унапред одређену величину, што омогућава ефикасну алокацију меморије.Хомогени елементи:Низови чувају елементе истог типа, обезбеђујући конзистентност података и поједностављујући операције.Итерација:Низови подржавају лаку итерацију кроз елементе, олакшавајући прелазак и обраду.Сортирање и претраживање:Низови добро функционишу са алгоритмима за сортирање и претраживање, нудећи ефикасне операције.Ефикасност меморије:Низови оптимизују коришћење меморије складиштењем елемената у суседним регионима.Компатибилност:Низови су широко подржани у Јави, што их чини компатибилним са различитим оквирима и алатима.

Недостаци:

    Фиксна величина:Низови се не могу динамички мењати, што захтева рекреацију за промене величине.Расипање меморије:Неискоришћени елементи у већим низовима могу довести до губитка меморије.Општи трошкови уметања и брисања:Уметање или брисање елемената у средини низа захтева померање следећих елемената, што доводи до неефикасности.Недостатак флексибилности:Низови имају круте типове података и не могу да приме различите врсте података без додатних низова или структура података.

Функције:

    Креирање низа:Декларисајте и иницијализујте низ одређене величине користећи тип низа и нову кључну реч.Приступ елементима:Користите индекс за приступ појединачним елементима у низу.Измена елемената:Ажурирајте вредност елемента тако што ћете доделити нову вредност одређеном индексу у низу.Дужина проналажења:Користите атрибут дужине да одредите дужину низа.Итерација кроз низ:Користите петље да бисте прошли кроз сваки елемент у низу и извршили га

Имплементација:

Назив документа: АрраиЕкампле.јава

 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) АрраиЛист:

АрраиЛист у Јави је динамичка структура података која омогућава складиштење и манипулацију елементима. То је део Јава Цоллецтионс Фрамеворк-а и имплементира се помоћу интерног низа.

Предности:

    Динамичка величина:За разлику од низова, АрраиЛистс може динамички да расте или смањује величину како се елементи додају или уклањају. Елиминише потребу за ручним променом величине и омогућава погодно руковање различитим количинама података.Једноставна манипулација елементима:АрраиЛистс нуде методе за додавање, уклањање и модификовање елемената на било којој позицији унутар листе. Његова флексибилност поједностављује уобичајене операције као што су уметање, брисање и ажурирање, чинећи манипулацију елементима ефикаснијом.Директног приступа:АрраиЛистс подржавају насумични приступ елементима користећи њихов индекс, омогућавајући брзо проналажење и модификацију елемената на одређеним позицијама унутар листе. Омогућава ефикасан приступ елементима и побољшава укупне перформансе.Компатибилност са Јава Цоллецтион Фрамеворк-ом:АрраиЛистс имплементирају интерфејс листе, чинећи их компатибилним са другим класама колекције у оквиру Јава Цоллецтионс Фрамеворк-а. Његова компатибилност омогућава беспрекорну интеграцију са различитим алгоритмима и операцијама које обезбеђује оквир.

Недостаци:

    Већи трошкови меморије:Листе низова захтевају додатну меморију да би одржале своју унутрашњу структуру, што доводи до већег оптерећења меморије у поређењу са низовима. То може бити проблем када се ради о великим збиркама елемената.Спорије уметање и брисање:Уметање или брисање елемената у средини АрраиЛист захтева померање елемената, што може бити дуготрајно за велике листе. У сценаријима где се очекују честе операције уметања или брисања, друге структуре података као што је ЛинкедЛист могу понудити боље перформансе.Ограничене перформансе за претрагу:Претраживање елемента у несортираном АрраиЛист-у захтева понављање елемената док се не пронађе подударање. То је приступ линеарне претраге који резултира споријим перформансама претраге у поређењу са структурама података оптимизованим за претрагу, као што су ХасхСет или ТрееМап.Нема подршке за примитивни тип:АрраиЛистс могу да чувају само објекте и не подржавају директно примитивне типове података као што су инт или цхар. За складиштење примитивних типова, класе омотача као што су Интегер или Цхарацтер морају да се користе, што доводи до потенцијалног аутоматског боксовања и распакивања.

Функције:

НФА примери
    Креирање АрраиЛист:Декларисајте и иницијализујте АрраиЛист користећи класу АрраиЛист и наведите тип елемента унутар угаоних заграда.Додавање елемената:Користите метод адд да бисте додали елементе на крају АрраиЛист.Приступ елементима:Користите технику гет да бисте добили цену детаља на изабраном индексу.Измена елемената:Ажурирајте цену детаља на одређеном индексу за коришћење скупа приступа.Проналажење величине:Користите методу димензија да бисте добили најсавременију количину фактора у АрраиЛист-у.Уклањање елемената:Користите приступ уклањања да бисте избрисали детаљ на одређеном индексу или путем пружања референце објекта.Итерација кроз АрраиЛист:Користите петље да пређете преко сваког елемента у АрраиЛист и извршите операције на њима.

Имплементација:

Назив документа: АрраиЛистЕкампле.јава

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

Излаз:

научи селен
 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) Повезана листа:

Повезана листа је линеарна структура података у којој се елементи чувају у засебним објектима који се називају чворови. Референтна веза до следећег чвора у низу је укључена у елемент података сваког чвора. Последњи чвор листе повезује се са нулом, што указује да је листа завршена.

За разлику од низова, повезане листе не захтевају непрекидну алокацију меморије. Сваки чвор у повезаној листи може се доделити независно, омогућавајући динамичку алокацију меморије и ефикасне операције уметања и брисања.

Предности:

    Динамичка величина:ЛинкедЛист може да расте или да се смањује динамички, што га чини погодним за различите или непознате величине података.Ефикасно уметање и брисање:Уметање или брисање елемената унутар ЛинкедЛист-а је ефикасно, јер не захтева померање елемената.Нема услова за континуалну меморију:ЛинкедЛист-у није потребна континуална додела меморије, што га чини флексибилним и погодним за непредвидиве меморијске ситуације.Лака модификација:ЛинкедЛист омогућава лаку модификацију елемената променом референтних показивача, омогућавајући ефикасну манипулацију.

Недостаци:

    Спорији насумични приступ:ЛинкедЛист има спорији насумични приступ јер захтева прелазак преко листе да би се приступило елементима по индексу.Повећани трошкови меморије:ЛинкедЛист захтева додатну меморију за референце и чворове, повећавајући меморијски простор у поређењу са низовима.Неефикасна претрага:ЛинкедЛист има спорије операције претраживања, које захтевају секвенцијалну итерацију да би се пронашли одређени елементи.

Функције:

    Прављење ЛинкедЛист-а:Декларишите и иницијализујте ЛинкедЛист користећи класу ЛинкедЛист.Додавање елемената:Користите метод додавања да бисте додали елементе на крају ЛинкедЛист-а.Приступ елементима:Користите метод гет да бисте преузели вредност елемента на одређеном индексу.Измена елемената:Ажурирајте вредност елемента на одређеном индексу користећи метод сет.Уклањање елемената:Користите методу ремове да бисте избрисали елемент на одређеном индексу или дајући референцу објекта.

Имплементација:

Назив документа: ЛинкедЛист1.јава

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

Излаз:

 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) Стацк:

Принцип Ласт-Ин-Фирст-Оут (ЛИФО) налаже да је елемент који је последњи уметнут такође елемент који се први уклања. Стек је линеарна структура података која прати ово правило. Користи команде 'пусх' и 'поп' за додавање елемената у стек и, сходно томе, уклањање горњег елемента из стека. Техника 'пеек' додатно омогућава приступ горњем елементу без његовог уклањања.

Карактеристике стека:

    ЛИФО понашање:Последњи елемент гурнут на сноп је први који се искаче, што га чини погодним за апликације где је редослед уметања и уклањања важан.Ограничен приступ:Стекови обично пружају ограничен приступ елементима. Можете приступити само највишем елементу, а да бисте дошли до других елемената, потребно је да поставите елементе изнад њих.Динамичка величина:Стекови се могу имплементирати помоћу низова или повезаних листа, омогућавајући динамичку величину. Они могу расти или се смањивати по потреби током рада.

Предности:

    једноставност:Стацкове је лако разумети и применити.Ефикасност:Операције уметања и брисања имају временску сложеност од О(1).Функција управљања позивима:Стекови ефикасно управљају позивима функција и променљивим складиштем.Поништи/Понови функционалност:Стекови омогућавају операције поништавања и понављања у апликацијама.

Недостаци:

    Ограничен приступ:Приступ елементима је ограничен на врх стека.Ограничења величине:Стогови могу имати ограничења величине у зависности од имплементације.Није погодно за све сценарије:Стекови су специфични за ЛИФО понашање и можда нису прикладни у другим случајевима.

Имплементација:

Назив документа: СтацкЕкампле.јава

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

Излаз:

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

5) Ред:

Ред је линеарна структура података у Јави која прати принцип „Први-први-излази“ (ФИФО). Представља колекцију елемената где се елементи убацују позади и уклањају са предње стране.

Карактеристике:

    ред у реду:Додавање елемента у задњи део реда.Декуеуе:Уклањање елемента са предње стране реда.завирити:Преузмите елемент на почетку реда без уклањања.Величина:Одређивање броја елемената у реду.Празан чек:Провера да ли је ред празан.

Предности:

    ФИФО понашање:Елементи се обрађују по редоследу њиховог уметања, обезбеђујући очување оригиналног низа.Ефикасно уметање и уклањање:Додавање и уклањање елемената из реда је брзо и има константну временску сложеност од О(1).Синхронизација:Јава обезбеђује синхронизоване имплементације редова, чинећи их безбедним за истовремено програмирање.Стандардизовани интерфејс:Интерфејс реда чекања у Јави нуди заједнички скуп метода, омогућавајући лаку замену између различитих имплементација реда чекања.

Недостаци:

    Без случајног приступа:Редови не подржавају директан приступ елементима у средини. Приступ одређеним позицијама захтева уклањање претходних елемената из реда.Ограничена величина:Неке имплементације реда имају фиксну величину или капацитет, што доводи до прекорачења или изузетака када се премаши максимална величина.Неефикасна претрага:Претраживање елемента у реду захтева уклањање из реда све док се не пронађе подударање, што резултира линеарном претрагом са потенцијално великом временском сложеношћу.

Имплементација:

Назив документа: КуеуеЕкампле.јава

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

Излаз:

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

6) ХасхМап:

ХасхМап је структура података у Јави која пружа начин за чување и преузимање парова кључ-вредност. Он је део Јава Цоллецтионс Фрамеворк-а и имплементиран је на основу структуре података хеш табеле.

Функције:

    стави (кључ, вредност):Умеће наведени пар кључ/вредност у ХасхМап.гет(кључ):Преузима вредност повезану са наведеним кључем.садржиКључ(кључ):Проверава да ли ХасхМап садржи наведени кључ.садржиВредност(вредност):Проверава да ли ХасхМап садржи наведену вредност.уклони (кључ):Уклања пар кључ-вредност повезан са наведеним кључем из ХасхМап-а.величина():Враћа број парова кључ/вредност у ХасхМап-у.Празно():Проверава да ли је ХасхМап празан.кеиСет():Враћа скуп који садржи све кључеве у ХасхМап-у.вредности():Враћа колекцију која садржи све вредности у ХасхМап-у.јасно():Уклања све парове кључ/вредност из ХасхМап-а.

Предности:

    Ефикасно преузимање:ХасхМап обезбеђује брзо проналажење вредности на основу кључева са константном временском сложеношћу О(1).Флексибилно упаривање кључ-вредност:ХасхМап дозвољава било који објекат који није нулти као кључ, омогућавајући прилагођене дефинисане кључеве за чување и преузимање података.Динамичка величина:ХасхМап може динамички да расте или смањује величину да би могао да обрађује различите количине података.Компатибилност са Јава Цоллецтионс Фрамеворк-ом:ХасхМап имплементира интерфејс мапе, омогућавајући беспрекорну интеграцију са другим класама колекције.

Недостаци:

    Недостатак наручивања:ХасхМап не чува редослед елемената. Користите ЛинкедХасхМап или ТрееМап за специфичне захтеве наручивања.Повећани трошкови меморије:ХасхМап захтева додатну меморију за хеш кодове и интерну структуру у поређењу са једноставнијим структурама података.Спорија итерација:Итерација преко ХасхМап-а може бити спорија у поређењу са низовима или листама због преласка основне хеш табеле.

Имплементација:

Назив документа: ХасхМапЕкампле.јава

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

Излаз:

 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) ХасхСет:

ХасхСет је структура података у Јави која имплементира Сет интерфејс и складишти елементе у хеш табели.

Карактеристике:

    Чува јединствене елементе:ХасхСет не дозвољава дупле елементе. Сваки елемент у ХасхСет-у је јединствен.Користи претрагу засновано на хеш-у:ХасхСет користи хеш вредност сваког елемента да одреди његову локацију за складиштење, обезбеђујући ефикасно преузимање елемента.Неуређена колекција:Елементи у ХасхСет-у се не чувају у одређеном редоследу. Редослед елемената се може променити током времена.

Предности:

    Брзо тражење елемената:ХасхСет обезбеђује брзе операције тражења, чинећи ефикасним проверу да ли елемент постоји у скупу.Нема дуплираних елемената:ХасхСет аутоматски обрађује дупле елементе и осигурава да је сваки елемент јединствен.Интеграција са Јава Цоллецтионс Фрамеворк-ом:ХасхСет имплементира Сет интерфејс, чинећи га компатибилним са другим класама колекције у оквиру Јава Цоллецтионс Фрамеворк-а.

Недостаци:

инстанцеоф у Јави
    Нема гарантованог налога:ХасхСет не одржава редослед елемената. Ако је редослед елемената важан, ХасхСет није прикладан.Без индексирања:ХасхСет не обезбеђује директно индексирање или позициони приступ елементима. Да бисте приступили елементима, потребно је да пређете преко скупа.Већи трошкови меморије:ХасхСет захтева додатну меморију за складиштење хеш вредности и одржавање структуре хеш табеле, што резултира већом употребом меморије у поређењу са неким другим структурама података.

Имплементација:

Назив документа: ХасхСетЕкампле.јава

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

Излаз:

 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) ТрееСет:

ТрееСет је имплементација интерфејса СортедСет у Јави која користи самобалансирајуће стабло бинарне претраге које се зове црвено-црно стабло за складиштење елемената у сортираном редоследу.

Предности:

    Сортирани редослед:ТрееСет аутоматски одржава елементе у сортираном редоследу на основу њиховог природног редоследа или прилагођеног компаратора. Омогућава ефикасно претраживање и проналажење елемената у растућем или опадајућем редоследу.Без дуплираних елемената:ТрееСет не дозвољава дуплирање елемената. Осигурава да је сваки елемент у скупу јединствен, што може бити корисно у сценаријима у којима треба избегавати дупле вредности.Ефикасне операције:ТрееСет пружа ефикасне операције попут уметања, брисања и претраживања. Ове операције имају временску сложеност од О(лог н), где је н број елемената у скупу.Операције скупа за навигацију:ТрееСет обезбеђује додатне методе навигације, као што су виши(), нижи(), цеилинг() и флоор(), који вам омогућавају да пронађете елементе који су већи, мањи или једнаки датој вредности.

Недостаци:

    Режије:ТрееСет захтева додатну меморију за складиштење интерне структуре података, што може довести до већег оптерећења меморије у поређењу са другим имплементацијама скупа.Спорије уметање и уклањање:Операције уметања и уклањања у ТрееСет-у укључују одржавање сортираног редоследа елемената, што може захтевати реструктурирање стабла. То може учинити ове операције мало споријим у поређењу са ХасхСет-ом или ЛинкедХасхСет-ом.Ограничено прилагођавање:ТрееСет је првенствено дизајниран за природно наручивање или један прилагођени компаратор. Можда ће требати више флексибилности за више критеријума сортирања или сложену логику сортирања.

Функције:

    адд(елемент):Додаје елемент у ТрееСет док одржава сортирани редослед.уклони (елемент):Уклања наведени елемент из ТрееСет-а.садржи (елемент):Проверава да ли ТрееСет садржи наведени елемент.величина():Враћа број елемената у ТрееСет-у.први():Враћа први (најнижи) елемент у ТрееСет-у.ласт():Враћа последњи (највиши) елемент у ТрееСет-у.виши (елемент):Враћа најмањи елемент у ТрееСет-у који је стриктно већи од датог елемента.нижи(елемент):Враћа највећи елемент у скупу дрвета који је стриктно мањи од датог елемента.

Имплементација:

Назив документа: ТрееСетЕкампле.јава

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

Излаз:

 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) ТрееМап:

ТрееМап је класа у Јави која имплементира интерфејс мапе и обезбеђује сортирано мапирање кључ-вредност на основу природног редоследа кључева или прилагођеног компаратора.

Предности:

    Сортирано редослед:ТрееМап одржава кључеве у сортираном редоследу, што омогућава ефикасно претраживање, проналажење и операције засноване на опсегу.Мапирање кључ-вредност:ТрееМап чува парове кључ-вредност, омогућавајући ефикасно тражење и преузимање вредности на основу повезаних кључева.Имплементација црвено-црног дрвета:ТрееМап интерно користи уравнотежено бинарно стабло претраге (црвено-црно дрво), обезбеђујући ефикасне перформансе чак и за велике скупове података.Подршка за прилагођене компараторе:ТрееМап омогућава коришћење прилагођених компаратора за дефинисање редоследа сортирања кључева, пружајући флексибилност критеријума сортирања.

Недостаци:

    Меморија изнад:ТрееМап захтева додатну меморију за складиштење унутрашње структуре стабла и повезаних објеката, што резултира већом употребом меморије у поређењу са једноставнијим структурама података као што је ХасхМап.Спорије уметање и брисање:Операције уметања и брисања у ТрееМап-у имају временску сложеност од О(лог н) због потребе за реструктурирањем стабла, што их чини споријим у поређењу са ХасхМап-ом или ЛинкедХасхМап-ом.Ограничене перформансе за несортиране податке:ТрееМап ради ефикасно за сортиране податке, али његове перформансе могу да се погоршају када се ради са несортираним подацима или честим модификацијама, јер захтева одржавање сортираног редоследа.

Функције:

    стави (кључ, вредност):Умеће пар кључ-вредност у ТрееМап.гет(кључ):Преузима вредност повезану са наведеним кључем.садржиКључ(кључ):Проверава да ли ТрееМап садржи одређени кључ.уклони (кључ):Уклања пар кључ/вредност повезан са наведеним кључем.величина():Враћа број парова кључ/вредност у ТрееМап-у.кеиСет():Враћа скуп свих кључева у ТрееМап-у.вредности():Враћа колекцију свих вредности у ТрееМап-у.ентриСет():Враћа скуп парова кључ/вредност у ТрееМап-у.

Имплементација:

Назив документа: ТрееМапЕкампле.јава

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

Излаз:

 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) Графикон:

Графови су структура података која представља колекцију међусобно повезаних чворова или врхова. Састоје се од врхова и ивица, где врхови представљају ентитете, а ивице односе између тих ентитета.

Предности:

    Свестраност:Графови могу представљати широк спектар сценарија из стварног света, што их чини погодним за различите апликације као што су друштвене мреже, транспортни системи и рачунарске мреже.Репрезентација веза:Графови пружају природан начин да се представе односи и везе између ентитета, омогућавајући ефикасну анализу и обилажење ових односа.Ефикасна претрага и прелазак:Алгоритми графа као што су претрага по ширини (БФС) и претрага по дубини (ДФС) омогућавају ефикасно прелажење и претраживање врхова и ивица графа.Моделирање сложених односа:Графови могу моделирати сложене односе, укључујући хијерархијске структуре, цикличне зависности и вишеструке везе између ентитета.

Недостаци:

    Сложеност простора:Графови могу да троше значајну количину меморије, посебно графови великих размера са много врхова и ивица.Сложеност операција:Одређене операције графа, као што је проналажење најкраће путање или откривање циклуса, могу имати велику временску сложеност, посебно у густим графовима.Потешкоће у одржавању:Модификовање или ажурирање графикона може бити сложено, јер промене у структури графикона могу утицати на његову повезаност и постојеће алгоритме.

Имплементација:

Назив документа: ГрапхЕкампле.јава

цаст инт у стринг јава
 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) Дрво:

Стабло је широко коришћена структура података у рачунарској науци која представља хијерархијску структуру. Састоји се од чворова повезаних ивицама, при чему сваки чвор може имати нула или више подређених чворова.

Предности:

    Хијерархијска структура:Стабла пружају природан начин за представљање хијерархијских односа, као што су системи датотека, организациони дијаграми или ХТМЛ/КСМЛ документи.Ефикасна претрага:Бинарна стабла претраге омогућавају ефикасну претрагу са временском сложеношћу од О(лог н), што их чини погодним за складиштење и преузимање сортираних података.Брзо уметање и брисање:Структуре података у облику дрвета нуде ефикасне операције уметања и брисања, посебно када су уравнотежене, као што су АВЛ стабла или црвено-црна стабла.Наручена итерација:Прелазак бинарног стабла претраге у редослед даје елементе у сортираном редоследу, што је корисно за задатке као што су штампање елемената у сортираном редоследу или проналажење следећег/претходног елемента.

Недостаци:

    Високи трошкови меморије:Дрвећу је потребна додатна меморија за складиштење референци чворова или показивача, што може резултирати већом употребом меморије у поређењу са линеарним структурама података као што су низови или листе.Сложена имплементација:Имплементација и одржавање структуре података стабла може бити сложенија у поређењу са другим структурама података као што су низови или листе, посебно за уравнотежене варијанте стабла.Ограничене операције:Неке варијанте стабла, попут стабала бинарног претраживања, не подржавају ефикасне операције као што је проналажење к-тог најмањег елемента или проналажење ранга елемента.

Функције:

    Уметање:Додајте нови чвор стаблу.Брисање:Уклоните чвор са стабла.Претрага:Пронађите одређени чвор или елемент у стаблу.Прелазак:Пређите кроз стабло различитим редоследом, као што су по поруџбини, по поруџбини унапред или по поруџбини.Висина/дубина:Израчунајте висину или дубину дрвета.Стање:Уверите се да дрво остане уравнотежено да би се одржало ефикасно пословање.

Имплементација:

Назив документа: ТрееЕкампле.јава

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