Skip to main content

Линейни Структури - Основи

Линейни Структури от Данни в Java

Линейните структури от данни играят важна роля в програмирането. Те предоставят начини за съхранение и манипулиране на множество от елементи, като предлагат различни модели за достъп и обработка. Най-често използваните линейни структури в Java са масивите, свързаните списъци (LinkedLists), стековете (Stacks) и опашките (Queues).

Свързан Списък (LinkedList)

  • Описание: Свързаните списъци са последователност от елементи, разположени произволно в паметта, където всеки елемент сочи към следващия.

  • Предимства и Недостатъци:

    • Предимства: Гъвкавост при добавяне и изтриване на елементи.
    • Недостатъци: По-бавен достъп до елементите; използва повече памет за съхранение на адреси.
  • Примерен Код:

    LinkedList<String> ll = new LinkedList<String>();
    ll.add("Пример");
    ll.add("за");
    ll.add("LinkedList");
    System.out.println("Съдържание: " + ll);

Динамичен Масив (ArrayList)

  • Описание: Динамичният масив е разновидност на масива, който позволява добавяне и изтриване на елементи, като автоматично управлява своя размер.

  • Предимства и Недостатъци:

    • Предимства: Гъвкавост; лесен за употреба.
    • Недостатъци: Може да бъде неефективен при чести реалокации на паметта.
  • Примерен Код:

    ArrayList<String> arrList = new ArrayList<String>();
    arrList.add("Пример");
    arrList.add("за");
    arrList.add("ArrayList");

Стек (Stack)

  • Описание: Стекът е структура от данни, работеща по принципа последен влязъл, първи излязъл (LIFO).

  • Примерен Код:

    Stack<String> stack = new Stack<String>();
    stack.push("Последен");
    stack.push("Първи");
    System.out.println("На върха е: " + stack.peek());

Опашка (Queue)

  • Описание: Опашката е структура от данни, работеща по принципа първи влязъл, първи излязъл (FIFO).

  • Примерен Код:

    Queue<String> queue = new LinkedList<String>();
    queue.offer("Първи");
    queue.offer("Последен");
    System.out.println("На началото е: " + queue.peek());

Заключение

Линейните структури от данни предоставят различни начини за управление на колекции от елементи в Java. В зависимост от нуждите на конкретната задача, програмистите могат да избират между различни структури като списъци, масиви, стекове и опашки, за да оптимизират своите програми. В следващите лекции ще разгледаме по-сложни структури като дървета и хеш таблици.

Сортиране в Линейни Структури от Данни

Сортирането е ключова операция при работа с линейни структури от данни, като списъци и масиви. В Java, сортирането може да се извърши чрез вградените методи в класа Collections или чрез дефиниране на собствени критерии за сортиране с помощта на Comparator интерфейса.

Сортиране с Collections.sort()

Методът Collections.sort() може да се използва за сортиране на обекти от тип List. За да работи, елементите в списъка трябва да имплементират интерфейса Comparable.

Пример:

import java.util.ArrayList;
import java.util.Collections;

ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(5);
numbers.add(3);
numbers.add(8);
Collections.sort(numbers); // Сортира във възходящ ред

Сортиране с Comparator

Comparator е интерфейс, който предоставя възможност за дефиниране на собствени правила за сортиране. Той е полезен, когато искаме да сортираме обекти, които не имплементират Comparable, или когато искаме да сортираме по някакъв специфичен, нетрадиционен начин.

Пример:

import java.util.Comparator;

class Person {
String name;
int age;
// Конструктор, getters и setters
}

Comparator<Person> compareByName = new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName());
}
};

Collections.sort(peopleList, compareByName); // Сортира хората по име

Сортиране на Обратно

Използвайки Collections.reverseOrder(), можем да сортираме списъци в обратен ред.

Пример:

ArrayList<String> names = new ArrayList<>();
names.add("Анна");
names.add("Иван");
names.add("Георги");
Collections.sort(names, Collections.reverseOrder()); // Сортира в обратен ред