Курсы по Java для новичков
676 subscribers
66 photos
1 video
4 files
73 links
Я Оксана Еськова - преподаватель Вуза с 20-летним стажем.
Научу писать код на Java c нуля.
Курсы c автоматической проверкой задач: https://stepik.org/users/23008752
Все вопросы сюда 👉 @aksana_yaskova
Download Telegram
import java.util.*;

class Person {
String name;

Person(String name) {
this.name = name;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person person)) return false;
return Objects.equals(name, person.name);
}
}

public class Main {
public static void main(String[] args) {
Map<Person, String> map = new HashMap<>();

Person p1 = new Person("Alex");
Person p2 = new Person("Alex");

map.put(p1, "Developer");

System.out.println(map.get(p2));
}
}
👍3
Что будет выведено на консоль?
Anonymous Quiz
46%
Developer
34%
null
18%
Ошибка компиляции
2%
Runtime Error
👍2
🔎 Как устроен HashMap в Java?
HashMap — это не просто “таблица ключ-значение”.
Под капотом — массив + связные списки + (иногда) деревья 😎

Когда вы делаете: map.put(key, value); происходит следующее:
1. Вызывается hashCode() для ключа
2. Хэш преобразуется в индекс массива
3. Определяется корзина (bucket), которая соответствует этому элементу массива, куда добавляется элемент.

Раньше (до Java 8) в корзине хранился связный список. С Java 8 — если элементов становится много (≥ 8), список превращается в красно-чёрное дерево 🌳. Это ускоряет поиск с O(n) → O(log n).

Когда вы делаете get(key):
1. Снова вычисляется hashCode() и определяется корзина
2. Внутри корзины перебирается список (или поиск в дереве) - вызывается equals() для поиска совпадений ключа
3. Если ключ найден — возвращается значение

Почему важно переопределять equals() и hashCode() вместе?
Потому что:
hashCode() определяет корзину
equals() подтверждает совпадение ключа
Нарушите контракт — и HashMap начнёт работать… непредсказуемо 😈
👍11
final StringBuilder sb = new StringBuilder("Java");
sb.append("!");
System.out.println(sb);
👍2
Что будет выведено на консоль?
Anonymous Quiz
14%
Java
70%
Java!
13%
Ошибка компиляции
3%
Runtime Error
👍2
class User {
final int age; //1

User(int age) {
this.age = age; //2
}

void updateAge() {
age = 30; //3
}
}
👍1
⚔️ final VS immutable — в чём разница?
🔹 final — это про ссылку. Но он не запрещает изменять состояние объекта.
final StringBuilder sb = new StringBuilder("Java");
sb.append("!"); //можно, результат Java!
sb = new StringBuilder("Other"); // ошибка компиляции

🔹 immutable — это про состояние объекта (неизменяемый объект)
String s = "Java";
s.concat("!");
System.out.println(s); //выводит Java, поскольку String immutable

💡 Как создать immutable-класс?
Минимальный набор:
• private final поля
• нет сеттеров
• класс не даёт изменить внутренние данные
👍11
💡 Интересный факт
В 1947 году команда компьютера Mark II, в которой работала Грейс Хоппер, обнаружила сбой в работе машины.
Причина оказалась в насекомом! 🦋
Моль застряла между контактами реле. Её аккуратно достали и приклеили в технический журнал с подписью:
“First actual case of bug being found.”
«Первый реальный случай обнаружения жука (бага)».
С тех пор поиск ошибок в программах называют debugging.
Но Грейс Хоппер известна не только этим. Она также участвовала в создании одного из первых компиляторов и стояла у истоков языка COBOL, который до сих пор используется в банковских системах.
Она стала не только легендой IT, но и контр-адмиралом ВМС США — редкое сочетание для программиста.
🔥12
Напоминание!

Наша «гендерная» распродажа подходит к концу.
Скидка 15% на все курсы по Java действует только до 9 марта включительно.

Если вы давно думали прокачать свои знания Java — сейчас самый удачный момент 🚀

После 9 марта цена вернётся к обычной.

Не откладывайте на «когда-нибудь», начните уже сейчас 👇
"Основы языка Java"
"Объектно-ориентированное программирование на Java"
"Прокачай Java"
"Java Core: программа курсов"
На этом снимке Маргарет Гамильтон рядом с распечатанным кодом для бортового компьютера «Аполлона» — программы NASA 1969 года по высадке человека на Луну.
Во время посадки компьютер внезапно начал выдавать ошибки 1201 и 1202.
Это означало перегрузку системы — слишком много задач одновременно.
Любая ошибка в тот момент могла привести к отмене посадки.
Но программное обеспечение, разработанное Маргарет Гамильтон, умело расставлять приоритеты задач. Компьютер автоматически отбросил второстепенные процессы и продолжил выполнять самое важное — посадку.
Фактически, именно такой подход к программированию помог спасти миссию.
Кстати, Маргарет Гамильтон одной из первых начала использовать термин “software engineering” — программная инженерия. Хотя в 1960-е годы многие считали, что написание программ — это просто вспомогательная работа.
Иногда хороший код — это буквально вопрос космического масштаба 🚀
19
public class Main {
public static void main(String[] args) {
System.out.println('A' + 1);
}
}
Что будет выведено на консоль? (Код 'A' равен 65)
Anonymous Quiz
34%
A1
12%
B
39%
66
15%
Ошибка компиляции
👍4
public class Main {
public static void main(String[] args) {
System.out.println(2 + 3 + "4");
System.out.println("2" + 3 + 4);
}
}
👍3
Что выведет код?
Anonymous Quiz
36%
54 27
40%
54 234
12%
234 234
12%
9 9
2👍2
Друзья! Тревожные слухи об отключении Телеграмма в России наводят меня на мысли о целесообразности этого канала. Ответьте, пожалуйста, есть ли у Вас проблемы с использованием Телеги?
Anonymous Poll
39%
Все нормально
14%
Да, это проблема
38%
У меня VPN, мне все равно
8%
Я из другой страны
class Animal {
static void info() {
System.out.println("Animal info");
}

void speak() {
System.out.println("Animal speaks");
}
}

class Dog extends Animal {
static void info() {
System.out.println("Dog info");
}

void speak() {
System.out.println("Dog barks");
}
}

public class Main {
public static void main(String[] args) {
Animal a = new Dog();

a.info();
a.speak();
}
}
🎉1
Что будет выведено на консоль?
Anonymous Quiz
10%
Animal info Animal speaks
51%
Dog info Dog barks
37%
Animal info Dog barks
2%
Dog info Animal speaks
👍2
class A {
A() {
System.out.print("A");
}
}

class B extends A {
B() {
System.out.print("B");
}
}

public class Main {
public static void main(String[] args) {
new B();
}
}