Java for Beginner
672 subscribers
541 photos
155 videos
12 files
827 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Всем доброго утра!!!

У кого какие планы?))) Делитесь!)

Предлагаю завтра организовать онлайн встречу))) Что-нибудь покодим несложное, бота какого-нибудь))

Кто за?)
Подписывайтесь на канал, и вы сможете придумать смешную надпись даже под такой картинкой😜

https://t.me/Java_for_beginner_dev

#Mems
Пузырьковая сортировка в Java
Пузырьковая сортировка следует простой логике. Она сравнивает соседние элементы и меняет местами если они не отсортированы.
Пузырьковая сортировка названа таким образом потому, что в этом способе сортировки, меньшие элементы постепенно всплывают в верхнюю часть списка.
Пузырьковая сортировка имеет среднее и наихудшее время равное О(n²), где n количество элементов которое нужно отсортировать.
Самая медленная сортировка
    public static void bubbleSort(int[] numbers) {

int n = numbers.length;
int temp = 0;

for (int i = 0; i < n; i++) {
for (int j = 1; j < (n - i); j++) {

if (numbers[j - 1] > numbers[j]) {
//swap elements
temp = numbers[j - 1];
numbers[j - 1] = numbers[j];
numbers[j] = temp;
}
}
}
}


Сортировка перемешиванием
, или Шейкерная сортировка, или двунаправленная (англ. Cocktail sort) — разновидность пузырьковой сортировки. Анализируя метод пузырьковой сортировки, можно отметить два обстоятельства.

Во-первых, если при движении по части массива перестановки не происходят, то эта часть массива уже отсортирована и, следовательно, её можно исключить из рассмотрения.

Во-вторых, при движении от конца массива к началу минимальный элемент «всплывает» на первую позицию, а максимальный элемент сдвигается только на одну позицию вправо.

Эти две идеи приводят к следующим модификациям в методе пузырьковой сортировки. Границы рабочей части массива (то есть части массива, где происходит движение) устанавливаются в месте последнего обмена на каждой итерации. Массив просматривается поочередно справа налево и слева направо.

    public static void shakerSort(int arr[]) {
int buff;
int left = 0;
int right = arr.length - 1;
do {
for (int i = left; i < right; i++) {
if (arr[i] > arr[i + 1]) {
buff = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = buff;
}
}
right--;
for (int i = right; i > left; i--) {
if (arr[i] < arr[i - 1]) {
buff = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = buff;
}
}
left++;
} while (left < right);
Подписывайтесь на канал, мы тоже вас ждем...

https://t.me/Java_for_beginner_dev

#Mems
Java for Beginner
Вы придете на встречу?
Сегодня в 16:00 по МСК, будем общаться, писать простого бота)))

Залетайте, ссылку опубликуем в нашем чате - https://t.me/Java_Beginner_chat
Урок по созданию простейшего бота окончен.
Жаль что присутствовал всего 1 человек(

Чуть позже видео будет на ютуб канале, обязательно выложу сюда.

Надеюсь, что оно окажется Вам полезным и на следующих выходных мы соберемся более плотной компанией)))))
Объектные потоки: ObjectInputStream, ObjectOutputStream

Объектные потоки в Java используются для чтения и записи объектов. Они позволяют сохранить состояние объекта и затем восстановить его, что полезно для хранения данных между запусками программы или передачи объектов между различными компонентами системы.

ObjectOutputStream

ObjectOutputStream — это класс, который используется для записи объектов в поток. Он записывает объекты в виде последовательности байтов, что позволяет сохранять и передавать объекты.

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

Конструкторы:
ObjectOutputStream(OutputStream out): Создает объект ObjectOutputStream, связанный с указанным выходным потоком.

Запись объектов:
void writeObject(Object obj): Записывает объект obj в выходной поток. Объект должен реализовывать интерфейс Serializable.

Другие методы
void close(): Закрывает поток и освобождает все связанные с ним ресурсы.
void flush(): Очищает буфер, записывая все данные в выходной поток.


Пример использования ObjectOutputStream для записи объекта в файл:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + '}';
}
}

public class ObjectOutputStreamExample {
public static void main(String[] args) {
Person person = new Person("John Doe", 30);

try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
}
}

В этом примере создается объект Person и записывается в файл person.ser с помощью ObjectOutputStream.


ObjectInputStream


ObjectInputStream — это класс, который используется для чтения объектов из потока. Он восстанавливает объекты из последовательности байтов, записанных с помощью ObjectOutputStream.

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

Конструкторы:

ObjectInputStream(InputStream in): Создает объект ObjectInputStream, связанный с указанным входным потоком.

Чтение объектов:

Object readObject(): Читает объект из входного потока. Требуется приведение типа (casting) к нужному классу.

Другие методы:

void close(): Закрывает поток и освобождает все связанные с ним ресурсы.

Пример использования ObjectInputStream для чтения объекта из файла:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class ObjectInputStreamExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person person = (Person) ois.readObject();
System.out.println(person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}

В этом примере объект Person читается из файла person.ser с помощью ObjectInputStream и выводится на консоль.

#Java #Training #IO
Что выведет код?

public class VariableTypesExample {
static int classVariable = 10; // Class variable

public static void main(String[] args) {
int localVariable = 5; // Local variable
VariableTypesExample example = new VariableTypesExample();
example.instanceMethod();
staticMethod();

System.out.println("Class Variable: " + classVariable);
System.out.println("Local Variable: " + localVariable);
System.out.println("Instance Variable: " + example.instanceVariable);
}

int instanceVariable = 20; // Instance variable

void instanceMethod() {
classVariable = 15;
instanceVariable = 25;
}

static void staticMethod() {
classVariable = 30;
}
}

#Tasks
Подписывайтесь на канал, не придется писать говно😏

https://t.me/Java_for_beginner_dev

#Mems
Сериализация и десериализация объектов

Сериализация — это процесс преобразования объекта в последовательность байтов, которая может быть сохранена в файл или передана по сети.
Десериализация — это обратный процесс, при котором байты преобразуются обратно в объект. Эти процессы позволяют сохранять состояние объекта и восстанавливать его в любой момент.


Сериализация

Для того чтобы объект можно было сериализовать, его класс должен реализовывать интерфейс Serializable. Этот интерфейс является маркерным, то есть не содержит методов и служит лишь для указания JVM, что объекты этого класса могут быть сериализованы.

Пример класса, реализующего Serializable:
import java.io.Serializable;

class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + '}';
}
}

В этом примере класс Person реализует Serializable, что позволяет его объекты сериализовать.


Процесс сериализации:

Создаем объект ObjectOutputStream, связанный с выходным потоком (например, FileOutputStream).
Вызываем метод writeObject(Object obj) для записи объекта в поток.


Пример сериализации:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class SerializationExample {
public static void main(String[] args) {
Person person = new Person("John Doe", 30);

try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
}
}



Десериализация

Процесс десериализации включает чтение последовательности байтов и создание из них объекта. Для этого используется класс ObjectInputStream.

Процесс десериализации:


Создаем объект ObjectInputStream, связанный с входным потоком (например, FileInputStream).
Вызываем метод readObject() для чтения объекта из потока. Обязательно выполняем приведение типа (casting) к нужному классу.


Пример десериализации:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class DeserializationExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person person = (Person) ois.readObject();
System.out.println(person);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}


serialVersionUID

Каждый сериализуемый класс должен иметь статическое поле serialVersionUID, которое используется для обеспечения совместимости версий класса. Если serialVersionUID у класса изменится, десериализация объектов, сериализованных с предыдущей версией класса, вызовет ошибку.


Пример объявления serialVersionUID:
class Person implements Serializable {
private static final long serialVersionUID = 1L;
// остальные поля и методы
}


Транзиентные поля

Поля, помеченные ключевым словом transient, не будут сериализованы. Это полезно для полей, которые не нужно сохранять, например, паролей или других конфиденциальных данных.


Пример использования transient:
class User implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private transient String password;

public User(String username, String password) {
this.username = username;
this.password = password;
}

@Override
public String toString() {
return "User{username='" + username + "', password='" + password + "'}";
}
}

В этом примере поле password не будет сериализовано.

#Java #Training #IO #Serializable
Классы-обёртки (Wrapper classes): Integer, Double

В Java классы-обёртки (Wrapper classes) предоставляют способ использования примитивных типов данных (таких как int, char, boolean и т.д.) в качестве объектов. Это необходимо, потому что многие методы и структуры данных в Java работают только с объектами, а не с примитивами.

Каждый примитивный тип данных имеет соответствующий класс-обёртку в пакете java.lang:

boolean -> Boolean
byte -> Byte
char -> Character
short -> Short
int -> Integer
long -> Long
float -> Float
double -> Double


Зачем нужны классы-обёртки?


Коллекции: Коллекции в Java, такие как ArrayList, могут хранить только объекты, поэтому классы-обёртки необходимы для работы с примитивными типами в коллекциях.
Методы: Некоторые методы, особенно в сторонних библиотеках, работают только с объектами.
Методы утилиты: Классы-обёртки предоставляют много полезных методов для преобразования, сравнения и манипулирования значениями.


Примеры использования классов-обёрток

Integer - класс-обёртка для примитивного типа int.

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

static Integer valueOf(int i): Возвращает экземпляр Integer, представляющий заданное значение int.
int intValue(): Возвращает значение int, хранимое в объекте Integer.
static int parseInt(String s): Преобразует строку в int.
static String toString(int i): Преобразует int в строку.
int compareTo(Integer anotherInteger): Сравнивает два объекта Integer.


Пример использования Integer:
public class WrapperExample {
public static void main(String[] args) {
Integer integerObject = Integer.valueOf(10);
int intValue = integerObject.intValue();
System.out.println("Integer value: " + intValue);

String str = "20";
int parsedInt = Integer.parseInt(str);
System.out.println("Parsed integer: " + parsedInt);
}
}


Double - класс-обёртка для примитивного типа double.

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

static Double valueOf(double d): Возвращает экземпляр Double, представляющий заданное значение double.
double doubleValue(): Возвращает значение double, хранимое в объекте Double.
static double parseDouble(String s): Преобразует строку в double.
static String toString(double d): Преобразует double в строку.
int compareTo(Double anotherDouble): Сравнивает два объекта Double.


Пример использования Double:
public class WrapperExample {
public static void main(String[] args) {
Double doubleObject = Double.valueOf(10.5);
double doubleValue = doubleObject.doubleValue();
System.out.println("Double value: " + doubleValue);

String str = "20.5";
double parsedDouble = Double.parseDouble(str);
System.out.println("Parsed double: " + parsedDouble);
}
}


Character - класс-обёртка для примитивного типа char.


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

static Character valueOf(char c): Возвращает экземпляр Character, представляющий заданное значение char.
char charValue(): Возвращает значение char, хранимое в объекте Character.
static boolean isDigit(char ch): Проверяет, является ли символ цифрой.
static boolean isLetter(char ch): Проверяет, является ли символ буквой.
static char toUpperCase(char ch): Преобразует символ в верхний регистр.
static char toLowerCase(char ch): Преобразует символ в нижний регистр.


Пример использования Character:
public class WrapperExample {
public static void main(String[] args) {
Character charObject = Character.valueOf('a');
char charValue = charObject.charValue();
System.out.println("Character value: " + charValue);

char upperChar = Character.toUpperCase(charValue);
System.out.println("Upper case: " + upperChar);

boolean isLetter = Character.isLetter(charValue);
System.out.println("Is letter: " + isLetter);
}
}


#Java #Training
Что выведет код?

public class BoxingExample {
public static void main(String[] args) {
Integer a = 1000;
Integer b = 1000;
Integer c = 10;
Integer d = 10;

System.out.println(a == b);
System.out.println(c == d);
}
}


#Tasks
Варианты ответа:
Anonymous Quiz
29%
false false
50%
true true
21%
false true
0%
true false
Подписывайтесь на канал, мы поможем построить правильные планы 😏

https://t.me/Java_for_beginner_dev

#Mems