Подписывайтесь на канал, и вы сможете придумать смешную надпись даже под такой картинкой😜
https://t.me/Java_for_beginner_dev
#Mems
https://t.me/Java_for_beginner_dev
#Mems
Пузырьковая сортировка в Java
Пузырьковая сортировка следует простой логике. Она сравнивает соседние элементы и меняет местами если они не отсортированы.
Пузырьковая сортировка названа таким образом потому, что в этом способе сортировки, меньшие элементы постепенно всплывают в верхнюю часть списка.
Пузырьковая сортировка имеет среднее и наихудшее время равное О(n²), где n количество элементов которое нужно отсортировать.
Самая медленная сортировка
Сортировка перемешиванием
, или Шейкерная сортировка, или двунаправленная (англ. Cocktail sort) — разновидность пузырьковой сортировки. Анализируя метод пузырьковой сортировки, можно отметить два обстоятельства.
Во-первых, если при движении по части массива перестановки не происходят, то эта часть массива уже отсортирована и, следовательно, её можно исключить из рассмотрения.
Во-вторых, при движении от конца массива к началу минимальный элемент «всплывает» на первую позицию, а максимальный элемент сдвигается только на одну позицию вправо.
Эти две идеи приводят к следующим модификациям в методе пузырьковой сортировки. Границы рабочей части массива (то есть части массива, где происходит движение) устанавливаются в месте последнего обмена на каждой итерации. Массив просматривается поочередно справа налево и слева направо.
Пузырьковая сортировка следует простой логике. Она сравнивает соседние элементы и меняет местами если они не отсортированы.
Пузырьковая сортировка названа таким образом потому, что в этом способе сортировки, меньшие элементы постепенно всплывают в верхнюю часть списка.
Пузырьковая сортировка имеет среднее и наихудшее время равное О(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);
Вы придете на встречу?
Anonymous Poll
56%
Да, конечно, я хочу пообщаться
44%
Да, я хотел бы, но не могу
0%
Нет, я не приду, мне не инетересно!
Java for Beginner
Вы придете на встречу?
Сегодня в 16:00 по МСК, будем общаться, писать простого бота)))
Залетайте, ссылку опубликуем в нашем чате - https://t.me/Java_Beginner_chat
Залетайте, ссылку опубликуем в нашем чате - https://t.me/Java_Beginner_chat
Java for Beginner
Урок по созданию простейшего бота окончен. Жаль что присутствовал всего 1 человек( Чуть позже видео будет на ютуб канале, обязательно выложу сюда. Надеюсь, что оно окажется Вам полезным и на следующих выходных мы соберемся более плотной компанией)))))
https://youtu.be/1OQe8t3O3Ic - смотрим, задаем вопросы, критикуем!)))))
YouTube
Гайд по созданию простейшего телеграмм бота на JAVA. Запись встречи от 30.06.2024
В рамках встречи канала, рассказал как создать простейшего телеграмм бота, приписал простейшую логику.
ссылка на наш канал будет в комментариях!
#java #bot #telegram #intellij #guide #ultimate #гайд #телеграммканал #телеграммбот #телеграм #бот #создать
ссылка на наш канал будет в комментариях!
#java #bot #telegram #intellij #guide #ultimate #гайд #телеграммканал #телеграммбот #телеграм #бот #создать
Объектные потоки: ObjectInputStream, ObjectOutputStream
Объектные потоки в Java используются для чтения и записи объектов. Они позволяют сохранить состояние объекта и затем восстановить его, что полезно для хранения данных между запусками программы или передачи объектов между различными компонентами системы.
ObjectOutputStream
ObjectOutputStream — это класс, который используется для записи объектов в поток. Он записывает объекты в виде последовательности байтов, что позволяет сохранять и передавать объекты.
Основные методы ObjectOutputStream:
Конструкторы:
ObjectOutputStream(OutputStream out): Создает объект ObjectOutputStream, связанный с указанным выходным потоком.
Запись объектов:
void writeObject(Object obj): Записывает объект obj в выходной поток. Объект должен реализовывать интерфейс Serializable.
Другие методы
void close(): Закрывает поток и освобождает все связанные с ним ресурсы.
void flush(): Очищает буфер, записывая все данные в выходной поток.
Пример использования ObjectOutputStream для записи объекта в файл:
В этом примере создается объект Person и записывается в файл person.ser с помощью ObjectOutputStream.
ObjectInputStream
ObjectInputStream — это класс, который используется для чтения объектов из потока. Он восстанавливает объекты из последовательности байтов, записанных с помощью ObjectOutputStream.
Основные методы ObjectInputStream:
Конструкторы:
ObjectInputStream(InputStream in): Создает объект ObjectInputStream, связанный с указанным входным потоком.
Чтение объектов:
Object readObject(): Читает объект из входного потока. Требуется приведение типа (casting) к нужному классу.
Другие методы:
void close(): Закрывает поток и освобождает все связанные с ним ресурсы.
Пример использования ObjectInputStream для чтения объекта из файла:
В этом примере объект Person читается из файла person.ser с помощью ObjectInputStream и выводится на консоль.
#Java #Training #IO
Объектные потоки в 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
Что выведет код?
#Tasks
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
Сериализация и десериализация объектов
Сериализация — это процесс преобразования объекта в последовательность байтов, которая может быть сохранена в файл или передана по сети.
Десериализация — это обратный процесс, при котором байты преобразуются обратно в объект. Эти процессы позволяют сохранять состояние объекта и восстанавливать его в любой момент.
Сериализация
Для того чтобы объект можно было сериализовать, его класс должен реализовывать интерфейс Serializable. Этот интерфейс является маркерным, то есть не содержит методов и служит лишь для указания JVM, что объекты этого класса могут быть сериализованы.
Пример класса, реализующего Serializable:
В этом примере класс Person реализует Serializable, что позволяет его объекты сериализовать.
Процесс сериализации:
Создаем объект ObjectOutputStream, связанный с выходным потоком (например, FileOutputStream).
Вызываем метод writeObject(Object obj) для записи объекта в поток.
Пример сериализации:
Десериализация
Процесс десериализации включает чтение последовательности байтов и создание из них объекта. Для этого используется класс ObjectInputStream.
Процесс десериализации:
Создаем объект ObjectInputStream, связанный с входным потоком (например, FileInputStream).
Вызываем метод readObject() для чтения объекта из потока. Обязательно выполняем приведение типа (casting) к нужному классу.
Пример десериализации:
serialVersionUID
Каждый сериализуемый класс должен иметь статическое поле serialVersionUID, которое используется для обеспечения совместимости версий класса. Если serialVersionUID у класса изменится, десериализация объектов, сериализованных с предыдущей версией класса, вызовет ошибку.
Пример объявления serialVersionUID:
Транзиентные поля
Поля, помеченные ключевым словом transient, не будут сериализованы. Это полезно для полей, которые не нужно сохранять, например, паролей или других конфиденциальных данных.
Пример использования transient:
В этом примере поле password не будет сериализовано.
#Java #Training #IO #Serializable
Сериализация — это процесс преобразования объекта в последовательность байтов, которая может быть сохранена в файл или передана по сети.
Десериализация — это обратный процесс, при котором байты преобразуются обратно в объект. Эти процессы позволяют сохранять состояние объекта и восстанавливать его в любой момент.
Сериализация
Для того чтобы объект можно было сериализовать, его класс должен реализовывать интерфейс 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
Forwarded from English Beginners
Классы-обёртки (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:
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:
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:
#Java #Training
В 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
Что выведет код?
#Tasks
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
Подписывайтесь на канал, мы поможем построить правильные планы 😏
https://t.me/Java_for_beginner_dev
#Mems
https://t.me/Java_for_beginner_dev
#Mems
Forwarded from English Beginners