👍3
Друзья! Последняя неделя была посвящена небольшому отпуску в Польше. Варшава, Гданьск, Торунь. Встреча с младшим сыном и его семьёй, общение и новые впечатления. Всем желаю хорошей семьи и маленьких радостей в жизни!
❤19🔥8😍3
class Student {
String name;
Student(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
Map<Student, Integer> map = new TreeMap<>();
map.put(new Student("Alice"), 1);
map.put(new Student("Alice"), 2);
System.out.println(map.size());
}
}👍3
Как работает TreeMap в Java? 🌳
🔹 TreeMap — это реализация Map, которая хранит ключи в отсортированном порядке.
Но важно понять главное:
📌 Порядок задаётся не equals(), а сравнением:
— через compareTo() (если ключ реализует Comparable)
— или через Comparator, переданный в конструктор
Именно результат сравнения определяет:
— где хранится элемент
— считается ли ключ «тем же самым»
Если compareTo() возвращает 0 — ключи считаются одинаковыми, и значение перезапишется.
⚙️ Под капотом:
TreeMap построен на красно-чёрном дереве, поэтому:
— добавление, удаление, поиск → O(log n)
— элементы всегда отсортированы
💡 Важный момент:
equals() для TreeMap не обязателен,
но лучше, чтобы он был согласован с compareTo() — иначе можно получить неожиданные баги.
🔹 TreeMap — это реализация Map, которая хранит ключи в отсортированном порядке.
Но важно понять главное:
📌 Порядок задаётся не equals(), а сравнением:
— через compareTo() (если ключ реализует Comparable)
— или через Comparator, переданный в конструктор
Именно результат сравнения определяет:
— где хранится элемент
— считается ли ключ «тем же самым»
Если compareTo() возвращает 0 — ключи считаются одинаковыми, и значение перезапишется.
⚙️ Под капотом:
TreeMap построен на красно-чёрном дереве, поэтому:
— добавление, удаление, поиск → O(log n)
— элементы всегда отсортированы
💡 Важный момент:
equals() для TreeMap не обязателен,
но лучше, чтобы он был согласован с compareTo() — иначе можно получить неожиданные баги.
🔥1
import java.util.*;
class Person {
String name;
Person(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
TreeMap<Person, Integer> map = new TreeMap<>(Comparator.comparing(p -> p.name));
Person p1 = new Person("Alice");
Person p2 = new Person("Alice");
map.put(p1, 1);
map.put(p2, 2);
System.out.println(map.get(p1));
}
}
👍2
HashMap vs TreeMap в Java — в чём разница? 🤔
Обе структуры реализуют интерфейс Map, но ведут себя по-разному:
🔹 HashMap
— Быстрая работа (в среднем O(1))
— Не хранит порядок элементов
— Основан на хеш-таблице
— 📌 Ключи должны корректно реализовывать equals() и hashCode()
🔹 TreeMap
— Медленнее (O(log n))
— Хранит элементы отсортированными по ключу
— Основан на красно-чёрном дереве
— 📌 Ключи должны быть сравнимы: реализовывать Comparable (compareTo())
или передаваться с Comparator
📌 Когда что использовать?
— Нужна максимальная скорость → HashMap
— Нужна сортировка или диапазоны (например, от key1 до key2) → TreeMap
💡 Лайфхак: если порядок важен, но сортировка не нужна — посмотри ещё на LinkedHashMap.
Обе структуры реализуют интерфейс Map, но ведут себя по-разному:
🔹 HashMap
— Быстрая работа (в среднем O(1))
— Не хранит порядок элементов
— Основан на хеш-таблице
— 📌 Ключи должны корректно реализовывать equals() и hashCode()
🔹 TreeMap
— Медленнее (O(log n))
— Хранит элементы отсортированными по ключу
— Основан на красно-чёрном дереве
— 📌 Ключи должны быть сравнимы: реализовывать Comparable (compareTo())
или передаваться с Comparator
📌 Когда что использовать?
— Нужна максимальная скорость → HashMap
— Нужна сортировка или диапазоны (например, от key1 до key2) → TreeMap
💡 Лайфхак: если порядок важен, но сортировка не нужна — посмотри ещё на LinkedHashMap.
❤2👍1
Как проще всего вывести содержимое Map на консоль? 🤔
Есть несколько способов, но вот самые удобные и читаемые:
🔹 1. Самый ленивый способ — просто println
Работает из коробки!
Java сама выведет пары в формате:
{key1=value1, key2=value2, key3=value3}
✔️ Отлично подходит для быстрой отладки.
🔹 2. Через цикл for-each и entrySet() (классический вариант):
✔️ Плюс: есть доступ и к ключу, и к значению
✔️ Минус: чуть больше кода
🔹 3. Используя метод forEach() интерфейса Map (начиная с Java 8):
✔️ Плюс: максимально кратко и современно
✔️ Минус: может быть непривычно новичкам
Есть несколько способов, но вот самые удобные и читаемые:
🔹 1. Самый ленивый способ — просто println
System.out.println(myMap);
Работает из коробки!
Java сама выведет пары в формате:
{key1=value1, key2=value2, key3=value3}
✔️ Отлично подходит для быстрой отладки.
🔹 2. Через цикл for-each и entrySet() (классический вариант):
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}✔️ Плюс: есть доступ и к ключу, и к значению
✔️ Минус: чуть больше кода
🔹 3. Используя метод forEach() интерфейса Map (начиная с Java 8):
map.forEach((key, value) ->
System.out.println(key + " = " + value)
);
✔️ Плюс: максимально кратко и современно
✔️ Минус: может быть непривычно новичкам
👍4
“Зачем Вы нам даете тесты по Map?
Мы ведь до этой темы еще не дошли… “ - так, вероятно, скажут те, кто еще изучает “Основы языка Java” или “ООП”.
Да, для Вас приводимый код кажется странным и непонятным. И это нормально!
А я просто хочу привлечь внимание к своему курсу “Прокачай Java” 😊 В нем тема коллекций Java разбирается подробно, но без перегруза.
🤓 А также темы про ввод-вывод, многопоточность, регулярки, лямбда-выражения и Streams…
Тем более, что скоро грядет большая распродажа курсов на Степик. На этот курс будет скидка 20%.
Так что ждем начала распродажи 27 мая, и начинаем разбираться с Map! 💥
Мы ведь до этой темы еще не дошли… “ - так, вероятно, скажут те, кто еще изучает “Основы языка Java” или “ООП”.
Да, для Вас приводимый код кажется странным и непонятным. И это нормально!
А я просто хочу привлечь внимание к своему курсу “Прокачай Java” 😊 В нем тема коллекций Java разбирается подробно, но без перегруза.
🤓 А также темы про ввод-вывод, многопоточность, регулярки, лямбда-выражения и Streams…
Тем более, что скоро грядет большая распродажа курсов на Степик. На этот курс будет скидка 20%.
Так что ждем начала распродажи 27 мая, и начинаем разбираться с Map! 💥
🔥5❤2
class A {
int x = 5;
}
public class Main {
public static void main(String[] args) {
A a1 = new A();
A a2 = a1;
a2.x = 10;
System.out.println(a1.x);
}
}👍1
Повышаю цену на курс "Основы языка Java" 🥲
По рекомендации команды Степика я решила поднять цену на курс "Основы языка Java". Они считают, что низкая цена отпугивает подозрением на низкое качество 🤷♂️.
Но для Вас я зафиксировала прежнюю цену до конца июня.
Вы, конечно, уже прошли (или проходите) этот курс. Но, возможно, захотите подарить его кому-то :) Так что вот ссылка с вшитым промокодом: https://stepik.org/a/124803/pay?promo=c2f50a4565593edb
По рекомендации команды Степика я решила поднять цену на курс "Основы языка Java". Они считают, что низкая цена отпугивает подозрением на низкое качество 🤷♂️.
Но для Вас я зафиксировала прежнюю цену до конца июня.
Вы, конечно, уже прошли (или проходите) этот курс. Но, возможно, захотите подарить его кому-то :) Так что вот ссылка с вшитым промокодом: https://stepik.org/a/124803/pay?promo=c2f50a4565593edb
👍5
class A {
void print() {
System.out.println("A");
}
}
class B extends A {
void print(int x) {
System.out.println("B");
}
}
public class Main {
public static void main(String[] args) {
A obj = new B();
obj.print();
}
}👍4
Переопределение vs Перегрузка в Java — в чем разница? 🤔
Эти два термина часто путают, хотя они про совершенно разные вещи.
🔹 Перегрузка (Overloading)
Это когда есть несколько методов с одинаковым именем, но разными параметрами.
✔️ Решается на этапе компиляции
✔️ Отличается сигнатура методов (параметры)
✔️ Используется для удобства и читаемости кода
🔹 Переопределение (Overriding)
Это когда подкласс изменяет поведение метода родительского класса.
✔️ Работает на этапе выполнения (runtime)
✔️ Требует наследования
✔️ Сигнатура метода должна совпадать
✔️ Позволяет реализовать полиморфизм
Эти два термина часто путают, хотя они про совершенно разные вещи.
🔹 Перегрузка (Overloading)
Это когда есть несколько методов с одинаковым именем, но разными параметрами.
✔️ Решается на этапе компиляции
✔️ Отличается сигнатура методов (параметры)
✔️ Используется для удобства и читаемости кода
🔹 Переопределение (Overriding)
Это когда подкласс изменяет поведение метода родительского класса.
✔️ Работает на этапе выполнения (runtime)
✔️ Требует наследования
✔️ Сигнатура метода должна совпадать
✔️ Позволяет реализовать полиморфизм
🔥4❤3
Скоро-скоро весенне-летняя распродажа курсов на Степике!
✔️С 27 мая по 9 июня на все мои курсы будет скидка 20%. Если хотите добавить себе новые знания и навыки – это само время!
✔️Курсы выстроены в логическую цепочку: “Основы языка Java” -> “Объектно – ориентированное программирование на Java” -> “Прокачай Java”.
👌В итоге – знания Java Core на уровне junior . Как видите, звезд с неба и позицию senior не обещаю. Но твердую базу для дальнейшего развития – да!
✔️С 27 мая по 9 июня на все мои курсы будет скидка 20%. Если хотите добавить себе новые знания и навыки – это само время!
✔️Курсы выстроены в логическую цепочку: “Основы языка Java” -> “Объектно – ориентированное программирование на Java” -> “Прокачай Java”.
👌В итоге – знания Java Core на уровне junior . Как видите, звезд с неба и позицию senior не обещаю. Но твердую базу для дальнейшего развития – да!
❤2
class Test {
static int x = 5;
static void change(int x) {
x = x + 10;
}
public static void main(String[] args) {
change(x);
System.out.println(x);
}
}