Что выведет код?
#Tasks
import java.util.stream.Stream;
public class Task120625 {
public static void main(String[] args) {
long count = Stream.of(1, 2, 3, 4)
.map(i -> {
System.out.print("m" + i + " ");
return i * 2;
})
.filter(i -> {
System.out.print("f" + i + " ");
return i > 3;
})
.count();
System.out.println("\ncount=" + count);
}
}
#Tasks
Варианты ответа:
Anonymous Quiz
33%
m1 m2 m3 m4 f2 f4 f6 f8 count=4
6%
f2 f4 f6 f8 count=2
50%
m1 f2 m2 f4 m3 f6 m4 f8 count=3
11%
f2 f4 f6 f8 count=2
Что такое паттерн Singleton и как его реализовать? 🤓
Ответ:
Singleton — паттерн, гарантирующий, что у класса есть только один экземпляр. Реализация включает приватный конструктор, статическое поле и метод доступа:
class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() { return instance; }
}
Для потокобезопасности можно использовать ленивую инициализацию с synchronized или double-checked locking.
#собеседование
Ответ:
class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() { return instance; }
}
Для потокобезопасности можно использовать ленивую инициализацию с synchronized или double-checked locking.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from ChatRoom (Java for Beginner) (Первожрец)
Please open Telegram to view this post
VIEW IN TELEGRAM
Ссылочные типы в Java — строки (String)
Строки (String) в Java — это особый ссылочный тип данных, играющий ключевую роль практически в любом приложении. Несмотря на кажущуюся простоту, строки обладают рядом особенностей, таких как неизменяемость, пул строк, перегрузка операций и поведение ссылок. Глубокое понимание строк необходимо для написания безопасного, производительного и корректного Java-кода.
Создание строк
В Java строки можно создавать несколькими способами:
В первом случае строка создаётся в пуле строк — специальной области памяти, где хранятся уникальные строковые литералы.
Во втором случае используется оператор new, что приводит к созданию нового объекта строки в куче, независимо от содержимого.
Также строки можно строить из массивов символов или байтов:
Ключевые особенности:
Строки в Java являются объектами класса java.lang.String.
Объекты String неизменяемы: после создания их содержимое нельзя изменить.
Неизменяемость позволяет безопасно использовать строки в многопоточном окружении и в качестве ключей в Map.
Существование и удаление строк
Как и любые объекты, строки существуют до тех пор, пока на них имеются активные ссылки. Когда все ссылки теряются, строка становится кандидатом на сборку мусора.
Однако строки, созданные как литералы (например, "Hello"), хранятся в строковом пуле, и удаление таких строк происходит только при завершении работы JVM или при агрессивной сборке мусора в редких случаях.
В случае создания строки через new, строки не участвуют в пуле по умолчанию:
Метод intern() позволяет вручную добавить строку в пул:
Использование строк
Строки активно используются при:
работе с вводом/выводом,
хранении текстовых данных,
построении логических выражений,
работе с шаблонами, логами и URL.
Java предоставляет множество удобных методов для работы со строками:
Важно помнить, что методы класса String возвращают новые строки, поскольку String неизменяем:
Сравнение строк:
#Java #для_новичков #beginner #reference_types #String
Строки (String) в Java — это особый ссылочный тип данных, играющий ключевую роль практически в любом приложении. Несмотря на кажущуюся простоту, строки обладают рядом особенностей, таких как неизменяемость, пул строк, перегрузка операций и поведение ссылок. Глубокое понимание строк необходимо для написания безопасного, производительного и корректного Java-кода.
Создание строк
В Java строки можно создавать несколькими способами:
String s1 = "Hello";
String s2 = new String("Hello");
В первом случае строка создаётся в пуле строк — специальной области памяти, где хранятся уникальные строковые литералы.
Во втором случае используется оператор new, что приводит к созданию нового объекта строки в куче, независимо от содержимого.
Также строки можно строить из массивов символов или байтов:
char[] chars = {'J', 'a', 'v', 'a'};
String s3 = new String(chars);
Ключевые особенности:
Строки в Java являются объектами класса java.lang.String.
Объекты String неизменяемы: после создания их содержимое нельзя изменить.
Неизменяемость позволяет безопасно использовать строки в многопоточном окружении и в качестве ключей в Map.
Существование и удаление строк
Как и любые объекты, строки существуют до тех пор, пока на них имеются активные ссылки. Когда все ссылки теряются, строка становится кандидатом на сборку мусора.
Однако строки, созданные как литералы (например, "Hello"), хранятся в строковом пуле, и удаление таких строк происходит только при завершении работы JVM или при агрессивной сборке мусора в редких случаях.
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // true — обе ссылаются на одну строку из пула
В случае создания строки через new, строки не участвуют в пуле по умолчанию:
String s1 = new String("abc");
String s2 = "abc";
System.out.println(s1 == s2); // false
Метод intern() позволяет вручную добавить строку в пул:
String s1 = new String("abc").intern();
String s2 = "abc";
System.out.println(s1 == s2); // true
Использование строк
Строки активно используются при:
работе с вводом/выводом,
хранении текстовых данных,
построении логических выражений,
работе с шаблонами, логами и URL.
Java предоставляет множество удобных методов для работы со строками:
String s = "Hello, World!";
int length = s.length();
char ch = s.charAt(0);
String lower = s.toLowerCase();
boolean contains = s.contains("World");
Важно помнить, что методы класса String возвращают новые строки, поскольку String неизменяем:
String original = "Java";
String modified = original.replace("J", "K");
System.out.println(original); // Java
System.out.println(modified); // Kava
Сравнение строк:
String a = "hello";
String b = new String("hello");
System.out.println(a == b); // false — разные объекты
System.out.println(a.equals(b)); // true — одинаковое содержимое
Оператор == сравнивает ссылки, а метод equals() — содержимое.
#Java #для_новичков #beginner #reference_types #String
Трудности и подводные камни
1. Неизменяемость
Изменение строки всегда приводит к созданию нового объекта. Это важно учитывать при работе в циклах:
Лучше использовать StringBuilder:
2. Сравнение с null
Обращение к методам строки без проверки может привести к NullPointerException:
Правильнее писать:
3. Пул строк и производительность
Пул строк позволяет уменьшить использование памяти, но злоупотребление вручную созданными строками через new String(...) может привести к увеличению нагрузки на сборщик мусора.
4. Конкатенация и производительность
Строки, объединённые с помощью + в цикле, могут ухудшать производительность. Лучше использовать StringBuilder или StringBuffer (если требуется потокобезопасность).
5. Использование в Map и Set
Поскольку строки неизменяемы, их можно безопасно использовать в качестве ключей в HashMap, HashSet и других коллекциях. Однако важно корректно переопределять equals() и hashCode() для классов, в которых строки используются в качестве полей для сравнения.
Дополнительные нюансы
1. String vs StringBuilder vs StringBuffer
String — неизменяемый, потокобезопасный.
StringBuilder — изменяемый, не потокобезопасный, но самый быстрый.
StringBuffer — изменяемый, потокобезопасный, но медленнее.
2. Методы класса String
Строки обладают большим набором методов:
substring()
trim()
split()
replace()
matches() (регулярные выражения)
format() и другие
3. Регулярные выражения
Методы matches(), replaceAll() и split() поддерживают регулярные выражения, что делает String мощным инструментом для разбора и обработки текста.
4. Юникод и кодировка
Java строки используют UTF-16, где каждый символ — это один или два 16-битных элемента. Это важно при работе с Unicode-символами, особенно при подсчёте длины строки или извлечении символов.
5. Объекты String в коллекциях
Если строка используется как ключ в Map, важно помнить, что разные ссылки на строки с одинаковым содержимым будут считаться одинаковыми, если equals() и hashCode() совпадают — что работает корректно для String.
#Java #для_новичков #beginner #reference_types #String
1. Неизменяемость
Изменение строки всегда приводит к созданию нового объекта. Это важно учитывать при работе в циклах:
String result = "";
for (int i = 0; i < 1000; i++) {
result += "a"; // создается 1000 новых строк
}
Лучше использовать StringBuilder:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append("a");
}
String result = sb.toString();
2. Сравнение с null
Обращение к методам строки без проверки может привести к NullPointerException:
String name = null;
if (name.equals("admin")) { // ошибка
}
Правильнее писать:
if ("admin".equals(name)) { // безопасно
}
3. Пул строк и производительность
Пул строк позволяет уменьшить использование памяти, но злоупотребление вручную созданными строками через new String(...) может привести к увеличению нагрузки на сборщик мусора.
4. Конкатенация и производительность
Строки, объединённые с помощью + в цикле, могут ухудшать производительность. Лучше использовать StringBuilder или StringBuffer (если требуется потокобезопасность).
5. Использование в Map и Set
Поскольку строки неизменяемы, их можно безопасно использовать в качестве ключей в HashMap, HashSet и других коллекциях. Однако важно корректно переопределять equals() и hashCode() для классов, в которых строки используются в качестве полей для сравнения.
Дополнительные нюансы
1. String vs StringBuilder vs StringBuffer
String — неизменяемый, потокобезопасный.
StringBuilder — изменяемый, не потокобезопасный, но самый быстрый.
StringBuffer — изменяемый, потокобезопасный, но медленнее.
2. Методы класса String
Строки обладают большим набором методов:
substring()
trim()
split()
replace()
matches() (регулярные выражения)
format() и другие
3. Регулярные выражения
Методы matches(), replaceAll() и split() поддерживают регулярные выражения, что делает String мощным инструментом для разбора и обработки текста.
4. Юникод и кодировка
Java строки используют UTF-16, где каждый символ — это один или два 16-битных элемента. Это важно при работе с Unicode-символами, особенно при подсчёте длины строки или извлечении символов.
5. Объекты String в коллекциях
Если строка используется как ключ в Map, важно помнить, что разные ссылки на строки с одинаковым содержимым будут считаться одинаковыми, если equals() и hashCode() совпадают — что работает корректно для String.
#Java #для_новичков #beginner #reference_types #String
Что выведет код?
#Tasks
public class Task130625 {
public static void main(String[] args) {
String s1 = "Java";
String s2 = new String("Java").intern();
String s3 = new StringBuilder("Ja").append("va").toString();
String s4 = s3.intern();
System.out.println((s1 == s2) + " " + (s1 == s3) + " " + (s1 == s4));
}
}
#Tasks
Варианты ответа:
Anonymous Quiz
15%
"true true false"
30%
"false true false"
10%
"true true true"
45%
"true false true"
Что такое Map.Entry в Java? 🤓
Ответ:
Map.Entry — это интерфейс, представляющий пару ключ-значение в Map.
Используется для итерации по элементам HashMap или других реализаций Map.
Пример:
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Методы getKey() и getValue() позволяют получить ключ и значение.
#собеседование
Ответ:
Используется для итерации по элементам HashMap или других реализаций Map.
Пример:
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Методы getKey() и getValue() позволяют получить ключ и значение.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
С 07.06 по 13.06
Предыдущий пост(с 31.05 по 06.06)
Воскресный мотивационный пост:
«Обучение Java — марафон, а не прыжок с трамплина»
Выбранная голосованием тема:
JavaMailSender в Spring Boot
Запись встреч:
Многопоточка во всей красе. Часть 2.
Обучающие статьи:
Объекты в Java
Ссылочные типы в Java — массивы
Ссылочные типы в Java — строки (String)
Введение в Flyway
Настройка и базовые команды Flyway
Пост о воспоминаниях:
Как мы писали крестики - нолики
Полезные статьи и видео:
Библиотека для кэширования Caffeine: анализ кода
Spring Data JPA и Hibernate: ориентируемся на производительность. Часть 1
Часть 1: Как я создал идеальный REST API — микросервис инцидентов на Java и Spring
Для тех кто знает английский - посмеяться
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
#memory
Предыдущий пост(с 31.05 по 06.06)
Воскресный мотивационный пост:
«Обучение Java — марафон, а не прыжок с трамплина»
Выбранная голосованием тема:
JavaMailSender в Spring Boot
Запись встреч:
Многопоточка во всей красе. Часть 2.
Обучающие статьи:
Объекты в Java
Ссылочные типы в Java — массивы
Ссылочные типы в Java — строки (String)
Введение в Flyway
Настройка и базовые команды Flyway
Пост о воспоминаниях:
Как мы писали крестики - нолики
Полезные статьи и видео:
Библиотека для кэширования Caffeine: анализ кода
Spring Data JPA и Hibernate: ориентируемся на производительность. Часть 1
Часть 1: Как я создал идеальный REST API — микросервис инцидентов на Java и Spring
Для тех кто знает английский - посмеяться
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
#memory
Есть предложение встретиться завтра в 16:00 по МСК на лайвкодинг!
Тема будет: StreamApi и функциональные интерфейсы
Тема будет: StreamApi и функциональные интерфейсы
Anonymous Poll
54%
Да, интересно я приду! 👌
21%
Блииин, хочу, но не могу 😭
21%
Посмотрю в записи ☺️
4%
Не, фигню рассматриваете, я ее знаю, не приду 🤫
Всем привет! 👋
Приглашаю всех желающих сегодня собраться в Яндекс.Телемост в 16:00 по МСК!
В этот раз мы рассмотрим такую нетривиальную тему как Stream API и функциональное программирование в целом.
И даже если раньше вы все это знали, лишним повторить не будет.
Приходите, это хороший шанс позадавать вопросы🧑💻
Как всегда жду всех! 🫡
Приглашаю всех желающих сегодня собраться в Яндекс.Телемост в 16:00 по МСК!
В этот раз мы рассмотрим такую нетривиальную тему как Stream API и функциональное программирование в целом.
И даже если раньше вы все это знали, лишним повторить не будет.
Приходите, это хороший шанс позадавать вопросы
Как всегда жду всех! 🫡
Please open Telegram to view this post
VIEW IN TELEGRAM
Предлагаем темы для разбора и публикации! 📖
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
🟢 темы, не выше уровня middle, чтоб был интерес общим.
🟢 Один человек - одна тема.
🟢 Тема должна быть отдельным теоретически-практическим вопросом. Готовый проект - это не тема!
Жду Ваших предложений!👏
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
Жду Ваших предложений!
Please open Telegram to view this post
VIEW IN TELEGRAM
Выбираем темы для рассмотрения в следующие выходные! 🤨
Anonymous Poll
31%
Optional
23%
AOP
31%
JSON
15%
IO/NIO
Please open Telegram to view this post
VIEW IN TELEGRAM