uz
Feedback
Java | Фишки и трюки

Java | Фишки и трюки

Kanalga Telegram’da o‘tish

Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna

Ko'proq ko'rsatish
6 952
Obunachilar
+124 soatlar
-107 kunlar
+1230 kunlar
Postlar arxiv
⌨️ Неизменяемые коллекции Для получения неизменяемого варианта коллекции, в классе Collections есть соответствующие методы:
unmodifiableCollection
unmodifiableSequencedCollection
unmodifiableSet
unmodifiableSequencedSet
unmodifiableSortedSet
unmodifiableNavigableSet
unmodifiableList
unmodifiableMap
unmodifiableSequencedMap
unmodifiableSortedMap
unmodifiableNavigableMap
Поскольку неизменяемые коллекции нельзя изменить, разработчики могут быть уверены, что состояние коллекции не будет неожиданно изменено в других частях программы. В некоторых случаях неизменяемые коллекции могут повышать производительность, так как операции над такими коллекциями не требуют блокировок и синхронизации.

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
List<String> unmodifiableList = Collections.unmodifiableList(list);
// Попытка изменить unmodifiableList приведет к UnsupportedOperationException
// unmodifiableList.remove("B");
#java #collections #immutable #unmodifiable

Привет! Рекомендую подписаться на канал Java: fill the gaps, полезно для разработчиков любого уровня🔥 Для продолжающих: 🔹 Как реализованы лямбда выражения внутри JVM 🔹 Библиотеки работы с данными: от JDBC до Spring Data 🔹 3 способа подружить Postgres и Kafka Для начинающих: 🔸 5 ошибок при использовании Optional 🔸 Fluent API: что такое и зачем нужен 🔸 Как освоить многопоточку Подписывайся👉 Java: fill the gaps

Что выведет код?
Anonymous voting

import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Quest {
    public static void main(String[] args) {
        List<String> list = Stream.of("Pizza", "Sushi", "Pasta", "Sushi", "Pizza")
                .sequential()
                .filter(new TreeSet<>()::add)
                .collect(Collectors.toList());
        System.out.println(list);
    }
}

Открытый урок. Аллокаторы в C++: Что делать, если менеджер памяти вас разочаровывает? C++ известен тем, что позволяет работат
Открытый урок. Аллокаторы в C++: Что делать, если менеджер памяти вас разочаровывает? C++ известен тем, что позволяет работать с памятью напрямую. Здесь вы точно знаете, где и как расположен каждый из ваших объектов, сколько памяти он занимает. Но можете ли вы принимать решение, где и как будет размещен ваш объект? Часто стандартные методы выделения памяти не удовлетворяют узким требованиям конкретной логики. Присоединяйтесь к открытому вебинару 8 августа в 20:00 мск! Поговорим, зачем в C++ существуют аллокаторы: https://clck.ru/3CCTpL  Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

⌨️ Почему String неизменяемый класс? Есть несколько преимуществ в неизменности строк: ✔️ Пул строк возможен только потому, что строка неизменяемая, таким образом виртуальная машина сохраняет больше свободного места в Heap, поскольку разные строковые переменные указывают на одну и ту же переменную в пуле. Если бы строка была изменяемой, то интернирование строк не было бы возможным, потому что изменение значения одной переменной отразилось бы также и на остальных переменных, ссылающихся на эту строку. ✔️ Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае злоумышленник может изменить значение ссылки и вызвать проблемы в безопасности приложения. ✔️ Неизменяемость позволяет избежать синхронизации: строки безопасны для многопоточности и один экземпляр строки может быть совместно использован различными потоками. ✔️ Строки используются classloader и неизменность обеспечивает правильность загрузки класса. ✔️ Поскольку строка неизменяемая, её hashCode() кэшируется в момент создания и нет необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в HashMap т.к. его обработка происходит быстрее. #java #string #immutable

👩‍💻 Программирование теперь в телеграм! Вот обширная база материалов, которая ежедневно обновляется, выбирай своё направлен
👩‍💻 Программирование теперь в телеграм! Вот обширная база материалов, которая ежедневно обновляется, выбирай своё направление: Обучение Java с нуля Обучение Python с нуля Обучение JavaScript с нуля Обучение HTML/CSS с нуля Обучение C/С++ с нуля Обучение С# с нуля Обучение SQL/GO/PHP с нуля Обучение Kotlin/Swift с нуля Курсы, книги, шпаргалки, статьи, видео, ресурсы — всё собрано в одном месте: @roadmap_ready

⌨️ Особенности класса String ✔️ Это неизменяемый (immutable) и финализированный тип данных; ✔️ Строки-литералы, интернированные объекты класса String JVM хранит в пуле строк; ✔️ Объект класса String можно получить, используя двойные кавычки; ✔️ Можно использовать оператор + для конкатенации строк; ✔️ Начиная с Java 7 строки можно использовать в конструкции switch. #java #string

Для тех кто просил, наш канал с мемами для айтишников и программистов 👇🏻 https://t.me/+Lf7ASxaQwd5mNmYy
Для тех кто просил, наш канал с мемами для айтишников и программистов 👇🏻 https://t.me/+Lf7ASxaQwd5mNmYy

⌨️ 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

⌨️ 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

Знания, профессиональный английский и хороший юмор — набор любого айтишника🔥 А быть в тренде и качать необходимые скиллы пом
Знания, профессиональный английский и хороший юмор — набор любого айтишника🔥 А быть в тренде и качать необходимые скиллы помогут наши каналы: Библиотека Кодера — книги, ресурсы, шпаргалки и статьи для разработчиков CodeLang — английский язык в IT-сфере JSON → Айти Memes — мемы для программистов и айтишников

🖥 Интересно про то как у нас в Java 23 должна была быть, но не будет, интерполяция строк (String Templates) В большинстве современных языков программирования уже есть интерполяция строк. Вот и в нашем любимом языке это должно было быть, но к сожалению придется ещё немного подождать. Это должно было выглядеть так:
String name = "Melissa";
System.out.println("Hello, \{name}!");
// Hello, Melissa!
Habr #java #StringTemplates

photo content

Что должен знать HR 1. Трудовое законодательство (тут вы улыбнетесь. Очевидно!) 2. Принципы поиска и отбора персонала (тут то
Что должен знать HR 1. Трудовое законодательство (тут вы улыбнетесь. Очевидно!) 2. Принципы поиска и отбора персонала (тут тоже смешно, кажется) 3. Кадровое делопроизводство (и тут нам есть, что сказать) Подписывать документы за пару минут со смартфона удобно и реально. КЭДО + Госключ от Битрикс24 поможет быстро и бесплатно получить усиленную ЭП и даст возможность подписывать с сотрудниками документы от мат.ответственности до трудового договора в пару кликов. А еще в Битрикс24 можно корпоративно чатиться в мессенджере, креативить с AI, синхронизироваться по видео до 100 человек, ставить задачи и продавать с CRM. Качественно экономьте и работайте на полную мощность вашего бизнеса с Битрикс24 Узнать больше #реклама bitrix24.ru О рекламодателе

⌨️ Какая основная разница между String, StringBuffer, StringBuilder? Класс String является неизменяемым (immutable) - модифицировать объект такого класса нельзя, можно лишь заменить его созданием нового экземпляра. Класс StringBuffer изменяемый - использовать StringBuffer следует тогда, когда необходимо часто модифицировать содержимое. Класс StringBuilder был добавлен в Java 5 и он во всем идентичен классу StringBuffer за исключением того, что он не синхронизирован и поэтому его методы выполняются значительно быстрей. #java #String #StringBuffer #StringBuilder

Что выведет код?
Anonymous voting

public class Quest {
    public final int value = 4;
    public void doIt() {
        int value = 6;
        Runnable r = new Runnable() {
            public final int value = 8;
            public void run() {
                int value = 10;
                System.out.println(this.value);
            }
        };
        r.run();
    }
    public static void main(String[] args) {
        new Quest().doIt();
    }
}
#java #quest

⌨️ Семафор (Semaphore) - класс из пакета java.util.concurrent, предназначенный для управления доступом к общим ресурсам в многопоточных приложениях. Он позволяет ограничить количество потоков, которые могут одновременно использовать определенный ресурс. Семафор управляет набором разрешений, и поток может запросить или освободить разрешение, тем самым контролируя доступ к общим ресурсам. Конструктор: Semaphore(int permits) - создает семафор с указанным числом разрешений. Методы для получения разрешений: void acquire() - запрашивает одно разрешение. Если разрешение недоступно, поток блокируется до тех пор, пока разрешение не станет доступным. void acquire(int permits) - запрашивает указанное количество разрешений. boolean tryAcquire() - запрашивает одно разрешение, если оно доступно, не блокируя поток. Возвращает true, если разрешение получено, и false в противном случае. boolean tryAcquire(long timeout, TimeUnit unit) - запрашивает одно разрешение, если оно доступно в течение указанного времени. Возвращает true, если разрешение получено, и false в противном случае. Методы для освобождения разрешений: void release() - освобождает одно разрешение, увеличивая внутренний счетчик разрешений. void release(int permits) - освобождает указанное количество разрешений. Пример:

import java.util.concurrent.Semaphore;

public class SemaphoreExample {
    private static final int MAX_CONCURRENT_THREADS = 3;
    private static final Semaphore semaphore = new Semaphore(MAX_CONCURRENT_THREADS);

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new Thread(new Worker(i)).start();
        }
    }

    static class Worker implements Runnable {
        private final int id;

        Worker(int id) {
            this.id = id;
        }

        @Override
        public void run() {
            try {
                System.out.println("Thread " + id + " is waiting for a permit.");
                semaphore.acquire();
                System.out.println("Thread " + id + " acquired a permit.");

                // Simulate some work with a sleep
                Thread.sleep(2000);

                System.out.println("Thread " + id + " releasing a permit.");
                semaphore.release();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
В этом примере создается семафор, который позволяет одновременно работать трем потокам. Остальные потоки будут ждать, пока не освободится разрешение. Каждый поток выполняет работу (симулированную с помощью Thread.sleep(2000)), после чего освобождает разрешение, позволяя другому ожидающему потоку приступить к работе. #java #semaphore