Java for Beginner
715 subscribers
646 photos
173 videos
12 files
1.01K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Особенности работы с Properties

Преемственность значений по умолчанию:
Одной из интересных возможностей Properties является возможность указания значений по умолчанию. Например, вы можете создать объект Properties, который будет содержать значения по умолчанию, и передать его в другой объект Properties.
Properties defaults = new Properties();
defaults.setProperty("language", "English");

Properties config = new Properties(defaults);
config.setProperty("database.url", "jdbc:mysql://localhost:3306/mydb");

System.out.println(config.getProperty("language")); // Выведет: English
В данном примере, если запрашиваемое свойство не найдено в объекте config, оно будет искаться в объекте defaults.


Работа с файлами:
Одним из ключевых преимуществ Properties является его возможность загружать и сохранять свойства в файлы. Это особенно полезно для создания конфигурационных файлов, которые могут быть изменены без перекомпиляции приложения.
try (FileInputStream input = new FileInputStream("config.properties")) {
Properties config = new Properties();
config.load(input);
System.out.println(config.getProperty("database.url"));
} catch (IOException e) {
e.printStackTrace();
}
В этом примере Properties загружаются из файла config.properties, и после этого можно получить доступ к его значениям.


Обработка строковых значений:
Properties работают исключительно с строками, поэтому любые данные, которые необходимо хранить, должны быть преобразованы в строки. Это накладывает определенные ограничения, но также упрощает сериализацию и десериализацию данных.

Управление локализацией:
Properties часто используются в связке с ResourceBundle для управления переводами и локализацией в приложениях. Это позволяет легко поддерживать несколько языков в приложении, используя различные файлы .properties для каждого языка.

Ссылки на полезные статьи (спасибо авторам за проделанную работу) :

https://www.baeldung.com/java-properties
https://www.geeksforgeeks.org/java-util-properties-class-java/

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

public class Main {
public static void main(String[] args) {
int a = 5;
int b = 10;
int c = a;
a = b;
b = c;

System.out.println(a + " " + b + " " + c);
}
}


#Tasks
Варианты ответа:
Anonymous Quiz
7%
5 10 5
7%
10 10 5
87%
10 5 5
0%
15 8 3
Джун: "Не знаю как, но все работает!" 😂😎

https://t.me/Java_for_beginner_dev

#Mems
😁2
❗️ ВНИМАНИЕ ❗️

Уважаемые подписчики, для разработки тестовой мини игры на языке JAVA, мы ищем 5-6 новичков в тестовую команду.

Что предстоит тем, кто примет участие:
- погружение в проектирование кода, совместное обдумывание и поиск оптимальных решений при помощи Miro.
- написание кода на Java Core.
- получение задач в JIRA (само собой обучение взаимодействию).
- реализация основных действия на GitHub: clone, pull, push и т.д. (и обучение всему этому).
- работа в команде
.

Зачем нам все это?

Основная цель как не странно, это не готовый продукт, а прокачка софт-скилов, таких как командное взаимодействие, понимание процессов разработки, работы в Git и JIRA (которые требуются в каждой второй вакансии на HH), укрепить и улучшить работу с JAVA Core.

Требования:
- 2-3 часа свободно времени в день (в промежутке от 16 до 22 по МСК для общения с командой).
- Начальное знание JAVA Core. (Рассмотрим варианты)
- Неконфликтность и желание учиться)))
.

Пишите Ваши предложения в комментариях!

Всем лучей добра😉🔆
1😱1
Основные методы Properties и примеры использования

setProperty(String key, String value):
Этот метод используется для добавления или обновления пары "ключ-значение" в объекте Properties.
Properties config = new Properties();
config.setProperty("database.url", "jdbc:mysql://localhost:3306/mydb");
config.setProperty("database.username", "root");
config.setProperty("database.password", "12345");
В этом примере мы создаем объект Properties и устанавливаем три свойства: URL базы данных, имя пользователя и пароль.


getProperty(String key):
Метод getProperty() позволяет получить значение свойства по его ключу. Если ключ не найден, метод вернет null.
String url = config.getProperty("database.url");
System.out.println("Database URL: " + url);
В этом примере значение свойства database.url извлекается и выводится на консоль.


getProperty(String key, String defaultValue):
Этот метод позволяет указать значение по умолчанию, которое будет возвращено в случае, если ключ не найден в объекте Properties.
String timeout = config.getProperty("connection.timeout", "30");
System.out.println("Connection timeout: " + timeout);
Если свойство connection.timeout не будет найдено, метод вернет значение "30".


load(InputStream inStream):
Метод load() загружает свойства из потока ввода (например, из файла).
try (FileInputStream input = new FileInputStream("config.properties")) {
Properties config = new Properties();
config.load(input);
} catch (IOException e) {
e.printStackTrace();
}
В этом примере свойства загружаются из файла config.properties.


store(OutputStream out, String comments):
Метод store() сохраняет свойства в выходной поток (например, в файл). Метод также позволяет добавить комментарии, которые будут записаны в начале файла.
try (FileOutputStream output = new FileOutputStream("config.properties")) {
config.store(output, "Database Configuration");
} catch (IOException e) {
e.printStackTrace();
}
В этом примере свойства сохраняются в файл config.properties, и в файл добавляется комментарий "Database Configuration".


propertyNames():
Метод propertyNames() возвращает перечисление всех ключей, содержащихся в объекте Properties.
Enumeration<?> propertyNames = config.propertyNames();
while (propertyNames.hasMoreElements()) {
String key = (String) propertyNames.nextElement();
System.out.println("Key: " + key + ", Value: " + config.getProperty(key));
}
В этом примере мы перебираем все ключи и выводим их вместе с соответствующими значениями.


stringPropertyNames():
Этот метод возвращает набор всех ключей, которые представлены строками.
Set<String> keys = config.stringPropertyNames();
for (String key : keys) {
System.out.println("Key: " + key + ", Value: " + config.getProperty(key));
}
stringPropertyNames() полезен, когда нужно работать с Set, а не с Enumeration.


remove(String key):
Метод remove() удаляет свойство по указанному ключу.
config.remove("database.password");
В этом примере удаляется свойство database.password.


clear():
Метод clear() очищает все свойства из объекта Properties.
config.clear();
После вызова этого метода все свойства будут удалены из объекта Properties.


#Java #Training #Medium #Properties
Примеры использования класса Properties

Пример 1: Загрузка и сохранение конфигурации приложения
Часто приложения требуют загрузки конфигурационных параметров из файла при старте и их сохранения при завершении.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class AppConfig {
private Properties config = new Properties();
private String configFilePath;

public AppConfig(String configFilePath) {
this.configFilePath = configFilePath;
loadConfig();
}

public void loadConfig() {
try (FileInputStream input = new FileInputStream(configFilePath)) {
config.load(input);
} catch (IOException e) {
e.printStackTrace();
}
}

public void saveConfig() {
try (FileOutputStream output = new FileOutputStream(configFilePath)) {
config.store(output, "Application Configuration");
} catch (IOException e) {
e.printStackTrace();
}
}

public String getSetting(String key, String defaultValue) {
return config.getProperty(key, defaultValue);
}

public void setSetting(String key, String value) {
config.setProperty(key, value);
}

public static void main(String[] args) {
AppConfig appConfig = new AppConfig("app.properties");

// Получение настроек
String url = appConfig.getSetting("database.url", "jdbc:mysql://localhost:3306/defaultdb");
System.out.println("Database URL: " + url);

// Установка и сохранение настроек
appConfig.setSetting("app.theme", "dark");
appConfig.saveConfig();
}
}
В этом примере класс AppConfig управляет загрузкой и сохранением конфигурации приложения, хранящейся в файле app.properties.


Пример 2: Локализация с использованием ResourceBundle
Класс Properties может использоваться совместно с ResourceBundle для реализации локализации приложения. Например, хранение сообщений на разных языках в отдельных файлах .properties.
import java.util.Locale;
import java.util.ResourceBundle;

public class LocalizationExample {
public static void main(String[] args) {
Locale currentLocale = new Locale("en", "US");
ResourceBundle messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);

System.out.println(messages.getString("greeting"));
}
}
Предположим, у нас есть два файла:

MessagesBundle_en_US.properties:

makefile
Копировать код
greeting=Hello!
MessagesBundle_fr_FR.properties:

makefile
Копировать код
greeting=Bonjour!
В зависимости от выбранной локали, приложение будет загружать соответствующий файл и использовать правильные сообщения.


Пример 3: Автозаполнение настроек по умолчанию
Иногда нужно использовать настройки по умолчанию, если они не указаны в конфигурационном файле.
import java.util.Properties;

public class DefaultSettingsExample {
public static void main(String[] args) {
Properties defaults = new Properties();
defaults.setProperty("app.theme", "light");
defaults.setProperty("app.language", "en");

Properties config = new Properties(defaults);
config.setProperty("app.theme", "dark");

System.out.println("Theme: " + config.getProperty("app.theme")); // Вывод: dark
System.out.println("Language: " + config.getProperty("app.language")); // Вывод: en
}
}
Здесь Properties использует значения по умолчанию, если они не были переопределены в основном конфигурационном объекте.


#Java #Training #Medium #Properties
Пример 4: Хранение пользовательских настроек
Предположим, у нас есть приложение, которое позволяет пользователям изменять настройки интерфейса, такие как тема или язык. Эти настройки можно сохранять в файл Properties, чтобы при следующем запуске приложения они автоматически подгружались.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class UserSettings {
private Properties settings = new Properties();
private String settingsFilePath;

public UserSettings(String settingsFilePath) {
this.settingsFilePath = settingsFilePath;
loadSettings();
}

private void loadSettings() {
try (FileInputStream input = new FileInputStream(settingsFilePath)) {
settings.load(input);
} catch (IOException e) {
System.out.println("Using default settings.");
}
}

public void saveSettings() {
try (FileOutputStream output = new FileOutputStream(settingsFilePath)) {
settings.store(output, "User Settings");
} catch (IOException e) {
e.printStackTrace();
}
}

public String getTheme() {
return settings.getProperty("theme", "light");
}

public void setTheme(String theme) {
settings.setProperty("theme", theme);
}

public String getLanguage() {
return settings.getProperty("language", "en");
}

public void setLanguage(String language) {
settings.setProperty("language", language);
}

public static void main(String[] args) {
UserSettings userSettings = new UserSettings("user.properties");

System.out.println("Current theme: " + userSettings.getTheme());
System.out.println("Current language: " + userSettings.getLanguage());

userSettings.setTheme("dark");
userSettings.setLanguage("fr");
userSettings.saveSettings();
}
}
В этом примере пользовательские настройки хранятся в файле user.properties и загружаются при запуске приложения. Пользователь может изменить тему и язык, и эти изменения сохраняются для последующего использования.


#Java #Training #Medium #Properties
Всем доброго субботнего утра!☀️

Надеюсь у всех была продуктивная неделя, все цели достигнуты и все желания выполнены!

У кого какие планы? Давайте уже, выкладывайте ваши пет-проекты, будем учиться друг у друга)))

====================================================

А я, если честно, еще не определился с темой которую будем рассматривать на встрече завтра🤷‍♂️, но думаю что-то придумаю)))

Есть мысли рассмотреть Docker или создание своей кастомной @аннотации))

Если у Вас есть идеи - предлагайте, рассмотрим)))😉
This media is not supported in your browser
VIEW IN TELEGRAM
Наша команда начала разработку мини-игры😂😂😂

https://t.me/Java_for_beginner_dev

#Mems
😁4
Всем привет!🖐

Сегодня, впрочем как и во все воскресения последних нескольких месяцев, в 16:00 по МСК, будет создана онлайн-встреча.

На ней я расскажу что такое Docker, как его установить и запустить. Рассмотрим что такое Dokerfile, docker-compose.yaml, тестово их напишем и запустим Postgresql, поработаем с ней через IntelliJ IDEA.

План амбициозный, но постараемся все сделать))))

Приходите будет интересно)
4👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Кошка, после всех моих интенсивов по изучению Java🤪😂

https://t.me/Java_for_beginner_dev

#Mems
Все, или почти все о Docker. Встреча от 01.09.2024

Запись нашей сегодняшней встречи -
YOUTUBE
RUTUBE

Спасибо тем кто смог прийти, за участие и вопросы!

На сегодняшней встрече, мы рассмотрели на примерах основные тезисы о Docker, его установке, настройке, и запуске.
Основное о Dockerfile, docker-compose.yaml.
Запустили Postgresql в контейнере, посмотрели его в работе.


Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!

Всем теплого вечера и хорошего настроения! 🫡✌️
🔥1
Встреча_в_Телемосте_01_09_24_20_08_55_—_запись.webm
274.8 MB
Для тех кто не смог победить блокировку Youtube и не желает заходить в Rutube выкладываю видео тут!

Смотрите на здоровье) 🫡

#online_meeting
Collections, особенности и внутреннее устройство

Работа с коллекциями — это неотъемлемая часть программирования на Java. Коллекции позволяют разработчикам удобно управлять группами объектов, будь то списки, множества, очереди или карты. Коллекции являются частью структуры данных и играют важную роль в решении множества задач, таких как сортировка, фильтрация и агрегирование данных.

Что такое коллекции?
Коллекции в Java представляют собой архитектуру, позволяющую группировать объекты, чтобы упростить управление и манипулирование ими. В Java коллекции представлены в виде интерфейсов и классов, которые обеспечивают удобные методы для работы с данными. Основные интерфейсы коллекций включают List, Set, Queue, Deque и Map. Каждый из этих интерфейсов реализуется различными классами, которые обеспечивают конкретную реализацию соответствующих структур данных.

Иерархия коллекций в Java начинается с интерфейса Collection, который является корневым интерфейсом для всех коллекций, за исключением Map. Вот основные интерфейсы и классы, которые используются для создания коллекций:
Collection: Основной интерфейс, от которого наследуются другие коллекции.

List: Коллекция, представляющая собой упорядоченный набор элементов, допускающий дублирование. Примеры: ArrayList, LinkedList.
Set: Коллекция, не допускающая дублирование элементов. Примеры: HashSet, TreeSet.
Queue: Коллекция, представляющая собой очередь, работающую по принципу FIFO (first-in, first-out). Примеры: LinkedList, PriorityQueue.
Deque: Двусторонняя очередь, позволяющая добавлять и удалять элементы с обеих сторон. Примеры: ArrayDeque, LinkedList.
Map: Интерфейс для хранения пар «ключ-значение», где каждый ключ уникален. Примеры: HashMap, TreeMap, LinkedHashMap.


Внутреннее устройство коллекций

Каждая коллекция в Java имеет свое уникальное внутреннее устройство и особенности, которые делают её подходящей для решения определенных задач:

1. ArrayList
ArrayList является реализацией интерфейса List, которая использует динамический массив для хранения элементов. Это означает, что элементы в ArrayList могут быть доступны по индексу, и этот доступ осуществляется за константное время (O(1)). Однако добавление новых элементов может потребовать перераспределения массива, что занимает время O(n). ArrayList отлично подходит для задач, где требуется частый доступ к элементам по индексу.

import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

System.out.println("List: " + list);
}
}


2. LinkedList
LinkedList также реализует интерфейс List, но использует связный список для хранения элементов. В отличие от ArrayList, LinkedList обеспечивает эффективное добавление и удаление элементов в начале и середине списка, поскольку для этого не требуется перераспределение памяти. Однако доступ к элементам по индексу занимает больше времени, так как необходимо последовательно переходить от одного узла к другому.

import java.util.LinkedList;
import java.util.List;

public class LinkedListExample {
public static void main(String[] args) {
List<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

System.out.println("List: " + list);
}
}


#Java #Training #Medium #Collections
3. HashSet
HashSet реализует интерфейс Set и хранит элементы в виде хэш-таблицы. В HashSet не допускается дублирование элементов, и порядок их хранения не гарантируется. Хэш-таблица обеспечивает быстрый доступ к элементам (O(1)), что делает HashSet отличным выбором для задач, где важна производительность при добавлении и поиске уникальных элементов.

import java.util.HashSet;
import java.util.Set;

public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
set.add("Apple"); // Дубликат не будет добавлен

System.out.println("Set: " + set);
}
}


4. TreeSet
TreeSet также реализует интерфейс Set, но хранит элементы в отсортированном порядке с использованием красно-черного дерева. Доступ к элементам и операции добавления выполняются за логарифмическое время (O(log n)). TreeSet используется, когда необходимо поддерживать элементы в отсортированном порядке.

import java.util.Set;
import java.util.TreeSet;

public class TreeSetExample {
public static void main(String[] args) {
Set<String> set = new TreeSet<>();
set.add("Banana");
set.add("Apple");
set.add("Cherry");

System.out.println("Sorted Set: " + set);
}
}


5. HashMap
HashMap реализует интерфейс Map и хранит данные в виде пар «ключ-значение». Ключи в HashMap уникальны, и доступ к значениям по ключу осуществляется за константное время (O(1)). HashMap является отличным выбором для хранения ассоциативных массивов, где важна производительность при доступе к данным по ключу.


import java.util.HashMap;
import java.util.Map;

public class HashMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);

System.out.println("Map: " + map);
}
}


Особенности коллекций

Изменяемые и неизменяемые коллекции: Большинство коллекций в Java являются изменяемыми, что означает, что их элементы можно добавлять, удалять и изменять. Однако существуют и неизменяемые коллекции, которые нельзя изменить после создания. Создание неизменяемых коллекций особенно важно в многопоточных приложениях для предотвращения непредсказуемого поведения.

Синхронизированные коллекции: Коллекции, такие как ArrayList и HashMap, не синхронизированы по умолчанию, что делает их небезопасными для многопоточной среды. Java предоставляет методы для создания синхронизированных коллекций, например, с использованием Collections.synchronizedList().

Производительность: Выбор правильной коллекции влияет на производительность приложения. Например, для частых операций вставки и удаления в середине списка лучше подходит LinkedList, тогда как для доступа по индексу предпочтительнее использовать ArrayList.


#Java #Training #Medium #Collections
👍2
Что выведет код?

import java.util.*;

public class Main {
public static void main(String[] args) {
Set<String> set = new HashSet<>(Arrays.asList("apple", "banana", "cherry", "date"));
set.removeIf(s -> s.length() > 5);
System.out.println(set);
}
}


#Tasks
Выбор очевиден же? 😂

https://t.me/Java_for_beginner_dev

#Mems
😁3
Основные утилитные методы класса Collections

1. sort(List<T> list)
Метод sort(List<T> list) сортирует элементы списка в естественном порядке или с использованием заданного компаратора. Это один из самых часто используемых методов для упорядочивания элементов в списке.
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;

public class SortExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(3);
numbers.add(1);
numbers.add(4);
numbers.add(2);

Collections.sort(numbers);

System.out.println("Sorted list: " + numbers);
}
}


Вывод:
Sorted list: [1, 2, 3, 4]
Этот пример демонстрирует сортировку списка целых чисел в естественном порядке (по возрастанию). Метод sort упорядочивает элементы на месте, изменяя исходный список.


2. reverse(List<?> list)

Метод reverse(List<?> list) изменяет порядок элементов в списке на противоположный. Это полезно, когда необходимо быстро изменить порядок элементов, например, для реализации функции отмены действий или для отображения данных в обратном порядке.
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;

public class ReverseExample {
public static void main(String[] args) {
List<String> items = new ArrayList<>();
items.add("Apple");
items.add("Banana");
items.add("Cherry");

Collections.reverse(items);

System.out.println("Reversed list: " + items);
}
}


Вывод:
Reversed list: [Cherry, Banana, Apple]
В этом примере список строк меняет свой порядок на противоположный с помощью метода reverse.


3. shuffle(List<?> list)
Метод shuffle(List<?> list) случайным образом перемешивает элементы списка. Этот метод полезен для создания случайных выборок данных, например, при разработке игр, тестов или при случайном перемешивании колоды карт.
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;

public class ShuffleExample {
public static void main(String[] args) {
List<String> items = new ArrayList<>();
items.add("Apple");
items.add("Banana");
items.add("Cherry");

Collections.shuffle(items);

System.out.println("Shuffled list: " + items);
}
}


Вывод может быть таким:
Shuffled list: [Banana, Cherry, Apple]
Метод shuffle перемешивает элементы списка в случайном порядке, так что каждый вызов метода может давать разный результат.


4. binarySearch(List<? extends Comparable<? super T>> list, T key)
Метод binarySearch(List<? extends Comparable<? super T>> list, T key) выполняет двоичный поиск указанного элемента в отсортированном списке. Метод возвращает индекс элемента, если он найден, и отрицательное значение, если элемент отсутствует в списке.
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;

public class BinarySearchExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);

int index = Collections.binarySearch(numbers, 3);

if (index >= 0) {
System.out.println("Found at index: " + index);
} else {
System.out.println("Not found");
}
}
}


Вывод:
Found at index: 2
Этот пример демонстрирует использование двоичного поиска для поиска числа 3 в отсортированном списке чисел.


#Java #Training #Medium #Collections