Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ Внутренняя реализация ArrayList

ArrayList — это реализация динамического массива из стандартной библиотеки коллекций java.util. Он представляет собой список, который может изменять свой размер в зависимости от количества добавляемых элементов.

ArrayList основан на массиве объектов. Это означает, что под капотом у него есть массив фиксированного размера. Когда этот массив заполняется, создается новый массив большего размера, в который копируются элементы старого массива, а затем старый массив удаляется.

Размер и емкость

✔️ Размер (size) — это количество элементов, которые фактически содержатся в ArrayList.

✔️ Емкость (capacity) — это текущий размер внутреннего массива. Когда количество элементов превышает емкость, массив расширяется.

Когда ArrayList инициализируется, его емкость по умолчанию равна 10. Если количество элементов в массиве превышает емкость, массив автоматически увеличивается. Обычно емкость увеличивается по формуле: новая емкость = старая емкость * 1.5.

Для удаления элементов используется метод remove(int index). После удаления элемента все элементы, находящиеся справа от удаленного, смещаются на одну позицию влево, что требует временных затрат O(n).

После удаления элементов ArrayList не автоматически уменьшает емкость внутреннего массива, то есть массив может занимать больше памяти, чем требуется для хранения фактических элементов. Однако для оптимизации можно вручную уменьшить емкость до текущего размера с помощью метода trimToSize().

Одним из преимуществ ArrayList является возможность доступа к элементам по индексу за время O(1). Это возможно благодаря тому, что элементы хранятся в массиве, и доступ к ним осуществляется через индекс.

#java #ArrayList
Please open Telegram to view this post
VIEW IN TELEGRAM
👍153🥰1
⌨️ private методы в интерфейсах

В Java с версии 9 появилась возможность использовать private методы в интерфейсах. Эти методы предназначены для улучшения внутренней организации интерфейсов, позволяя избежать дублирования кода в default и static методах. private методы помогают реализовать общую логику, к которой могут обращаться другие методы интерфейса, но они остаются недоступными для классов, реализующих интерфейс.

private методы могут быть как экземплярными, так и static.

Пример:

public interface MyInterface {
default void showMessage() {
print("Default method calling private method");
}

static void showStaticMessage() {
print("Static method calling private method");
}

// Private method for reuse
private static void print(String message) {
System.out.println(message);
}
}


#java #interface #private
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4🔥1
⌨️ PriorityQueue — это реализация структуры данных очередь с приоритетом, которая упорядочивает элементы по их естественному порядку или по заданному компаратору. Она представляет собой часть коллекции Java Collections Framework и находится в пакете java.util.

В отличие от Queue, элементы PriorityQueue не упорядочены по времени их добавления, а по приоритету.

Основные методы:

add(E e) - добавляет элемент в очередь.

remove() - удаляет и возвращает элемент с наивысшим приоритетом. Если очередь пуста, генерируется исключение NoSuchElementException.

poll() - удаляет и возвращает элемент с наивысшим приоритетом. Если очередь пуста, возвращает null.

peek() - возвращает, но не удаляет элемент с наивысшим приоритетом. Если очередь пуста, возвращает null.

element() - возвращает, но не удаляет элемент с наивысшим приоритетом. Если очередь пуста, генерируется исключение NoSuchElementException.

Пример:

class Task implements Comparable<Task> {
String name;
Integer priority;

public Task(String name, Integer priority) {
this.name = name;
this.priority = priority;
}

@Override
public int compareTo(@NotNull Task o) {
return priority - o.priority;
}
}

public class Test {
public static void main(String[] args) {
PriorityQueue<Task> pq = new PriorityQueue<>();

pq.add(new Task("Task1", 1));
pq.add(new Task("Task5", 5));
pq.add(new Task("Task2", 2));
pq.add(new Task("Task4", 4));
pq.add(new Task("Task3", 3));

while (!pq.isEmpty()) {
System.out.println(pq.poll().name);
// Выведет: Task1, Task2, Task3, Task4, Task5
}
}
}


#java #PriorityQueue
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74
⌨️ HashMap и TreeMap: Когда и как использовать

В Java коллекции Map предоставляют возможность хранить пары "ключ-значение". Два популярных варианта — HashMap и TreeMap. Давайте разберем их ключевые особенности и когда их лучше использовать.

📚 Kраткие определения:

- HashMap:
  - Неупорядоченная коллекция.
  - Основан на хэш-таблице.

- TreeMap:
  - Упорядоченная коллекция.
  - Основан на красно-черном дереве.
  - Поддерживает сортировку по ключам.

⚖️ Когда использовать:

- HashMap:
  - Если важна производительность и порядок хранения не имеет значения.
  - Когда нужно быстро получать значения по ключу

- TreeMap:
  - Если необходимо хранить элементы в отсортированном порядке.
  - Для использования функционала "примитивного" поиска (например, firstKey() или lastKey()).

📌 Подведение итогов:

Выбор между HashMap и TreeMap зависит от ваших требований к производительности и порядку элементов. Помните, что HashMap лучше подходит для большинства случаев, когда необходим быстрый доступ, а TreeMap — для упорядоченного хранения данных.

#java #HashMap #TreeMap
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91