Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🌕 Проверка идентификационных номеров: реализация алгоритма Луны на Java
Сначала метод выполняет проверку данных: он удаляет все пробелы, которые часто добавляются, чтобы сделать номера кредитных карт более читаемыми. Он также проверяет, что строка состоит только из цифр, без лишних символов, и обрабатывает любое возникающее исключение NumberFormatException.
Затем код перебирает каждую цифру, начиная справа, чтобы выполнить действия, описанные в разделе выше. Каждая вторая цифра умножается на 2, и в тех случаях, когда в результате получается число больше 9, эти две цифры суммируются вместе, чтобы вычислить однозначное число.
На каждой итерации цикла полученное число суммируется с переменной sum, которая используется для отслеживания общей суммы. После завершения цикла метод возвращает true, если сумма делится на 10.
Полный код можно найти на Github.
Отправляйте свою реализацию в комментарии👇
@javatg
public static boolean validateNumber(String number){
/*
Validation of user input: blank spaces are removed from the
numeric string. Also, the code ensures that the input is numeric
*/
number = number.replaceAll(" ", "");
try{
Long.parseLong(number);
} catch (NumberFormatException e){
System.out.println("Invalid input");
return false;
}
int sum = 0;
boolean alternateDigit = false;
/*
Starting from the right of the string, the code loops through each
digit and multiplies every second digit by 2.
*/
for(int i = number.length()-1; i >= 0; i--){
int digit = Integer.parseInt(number.substring(i, i+1));
if(alternateDigit){
digit *= 2;
if(digit > 9){
digit = 1 + (digit % 10);
}
}
sum += digit;
alternateDigit = !alternateDigit;
}
return (sum % 10 == 0);
}
Сначала метод выполняет проверку данных: он удаляет все пробелы, которые часто добавляются, чтобы сделать номера кредитных карт более читаемыми. Он также проверяет, что строка состоит только из цифр, без лишних символов, и обрабатывает любое возникающее исключение NumberFormatException.
Затем код перебирает каждую цифру, начиная справа, чтобы выполнить действия, описанные в разделе выше. Каждая вторая цифра умножается на 2, и в тех случаях, когда в результате получается число больше 9, эти две цифры суммируются вместе, чтобы вычислить однозначное число.
На каждой итерации цикла полученное число суммируется с переменной sum, которая используется для отслеживания общей суммы. После завершения цикла метод возвращает true, если сумма делится на 10.
Полный код можно найти на Github.
Отправляйте свою реализацию в комментарии👇
@javatg
Иногда в программах приходится создавать классы исключительно для хранения данных, а затем — функции определенных стандартов внутри этих классов.
В Kotlin все эти проблемы решаются с помощью классов данных, создаваемых с той же целью, но функции определенных стандартов в них содержатся автоматически:
data class Person(val name: String, val surname: String)
▪ Читать
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Максимальная площадь острова
Сложность: Средняя
Условие задачи: Условие задачи:
Дан двумерный массив размера m x n. "1" отвечает за сушу, "0" - за океан. Необходимо опеределить максмимальную площадь острова из островов, расположенных на карте.
Островом считается территория, образованная из "1", расположенных сверху, справа, снизу и слева относительно друг друга.
Пример:
Ввод:
grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]
Вывод:
6
Ввод:
grid = [[0,0,0,0,0,0,0,0]]
Вывод:
0
Решение
Временная сложность:
O(m*n)
Пространственная сложность:
O(m*n)
class Solution {
public int maxAreaOfIsland(int[][] grid) {
int maxArea = 0;
for(int i = 0; i < grid.length; i++) {
for(int j = 0; j < grid[0].length; j++) {
if(grid[i][j] == 1) {
maxArea = Math.max(maxArea, findArea(grid, i, j));
}
}
}
return maxArea;
}
private int findArea(int[][] grid, int row, int col) {
if(row < 0 || row >= grid.length || col < 0 || col >= grid[0].length || grid[row][col] == 0) {
return 0;
}
grid[row][col] = 0;
int count = 1;
count += findArea(grid, row, col-1);
count += findArea(grid, row, col+1);
count += findArea(grid, row-1, col);
count += findArea(grid, row+1, col);
return count;
}
}
Пишите свое решение в комментариях👇
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
На первый взгляд может показаться, что это очередной курс по Java, но это не так. Цель лекций — научить студентов писать качественный, понятный код с использованием лучших практик и тестирования.
Каждый урок подкреплён практикой с заданиями для проверки усвоения материала и заданиями:
https://openlearninglibrary.mit.edu/courses/course-v1:MITx+6.005.1x+3T2016/course/
#java
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Одним из достоинств Kotlin, отличающих его от других языков, в том числе Java, является подход к реализации утилитных классов. Утилиты могут быть полезными инструментами в разработке программного обеспечения, хотя и не всегда являются лучшим выбором при проектировании объектно-ориентированных систем.
Как Java-разработчику, вам будет полезно рассмотреть различные способы реализации утилитных классов в Kotlin и узнать, что делается в этом языке “под капотом”. Kotlin предлагает целый ряд различных способов, упрощающих переход от Java, начиная от сокращения стереотипного кода и заканчивая улучшением читаемости кода.
Понимание различий в реализации утилитных классов в Kotlin и Java — важный шаг в освоении такого мощного языка, как Kotlin. Будь вы опытный Java-разработчик, желающий расширить спектр своих навыков, или новичок в программировании, уделите внимание этому аспекту.
Как вам известно, создать утилитный класс в Java довольно просто. Процесс включает следующие шаги.
▪ Читать
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача. Слияние двух бинарных деревьев
Сложность: Лёгкая
Условие задачи: Даны два бинарных дерева, необходимо осуществить их наложение друг на друга и вывод результатов в новом дереве.
Примечание: Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Вывод:[3,4,5,5,4,null,7]
Ввод: root1 = [1], root2 = [1,2]
Вывод: [2,2]
Решение
Пишите свое мнение в комментариях👇
@javatg
Сложность: Лёгкая
Условие задачи: Даны два бинарных дерева, необходимо осуществить их наложение друг на друга и вывод результатов в новом дереве.
Примечание: Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Вывод:[3,4,5,5,4,null,7]
Ввод: root1 = [1], root2 = [1,2]
Вывод: [2,2]
Решение
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if (root1==null && root2==null) return null;
if (root1==null) return root2;
if (root2==null) return root1;
root1.val = root1.val+root2.val;
root1.left = mergeTrees(root1.left, root2.left);
root1.right = mergeTrees(root1.right, root2.right);
return root1;
}
}
Пишите свое мнение в комментариях👇
@javatg
📚 Подборка бесплатных и актуальных книг по всем языкам программирования.
Java книги
Книги датасаентиста
Golang библиотека
Python библиотека
Крупнейший склад ит-книг
C++ книги
C# книги
Frontend книги
Книги по базам данных
Топ книги по Linux
Библиотека машинного обучения
Сохраняем себе, чтобы не потерять
Java книги
Книги датасаентиста
Golang библиотека
Python библиотека
Крупнейший склад ит-книг
C++ книги
C# книги
Frontend книги
Книги по базам данных
Топ книги по Linux
Библиотека машинного обучения
Сохраняем себе, чтобы не потерять
🎧 JavaFX пример MP3-плеера
Это простой пример mp3-плеера, созданного с помощью JavaFX. Приложение имеет кнопку для открытия и воспроизведения трека, кнопки паузы, возобновления и остановки с соответствующими функциями. Для воспроизведения музыки мы используем класс MediaPlayer -> Класс MediaPlayer предоставляет элементы управления для воспроизведения мультимедиа.
MediaPlayer предоставляет элементы управления pause(), play(), stop() и seek(), а также свойства rate и autoPlay, которые применяются ко всем типам медиа. В коде также представлены свойства balance, mute и volume, которые управляют характеристиками воспроизведения аудио.
▪ Читать
@javatg
Это простой пример mp3-плеера, созданного с помощью JavaFX. Приложение имеет кнопку для открытия и воспроизведения трека, кнопки паузы, возобновления и остановки с соответствующими функциями. Для воспроизведения музыки мы используем класс MediaPlayer -> Класс MediaPlayer предоставляет элементы управления для воспроизведения мультимедиа.
MediaPlayer предоставляет элементы управления pause(), play(), stop() и seek(), а также свойства rate и autoPlay, которые применяются ко всем типам медиа. В коде также представлены свойства balance, mute и volume, которые управляют характеристиками воспроизведения аудио.
▪ Читать
@javatg
Вашему вниманию предлагается набор рекомендаций, соблюдение которых поможет улучшить качество вашего Java-кода.
1. По возможности отдавайте предпочтение примитивам, а не классам-оболочкам
Long idNumber;
long idNumber; // long занимает меньше памяти, чем Long
2. Попробуйте использовать подходящий тип для вашей переменнойЕсли два или более типов удовлетворяют вашим функциональным потребностям, используйте тот тип, который занимает меньше места в памяти.
i
nt birthYear;
short birthYear; // лучше, потому что год рождения не может быть пятизначным
int personRunningSpeedKmHour;
byte personRunningSpeedKmHour; // лучше, потому что скорость движения человека ограничена
3. При проверке нечетности числа побитовый оператор AND намного быстрее, чем арифметический оператор по модулю
public boolean isOdd(int num) {
return (num & 1) != 0;
}
// лучший способ проверить нечетность числа
4. Избегайте избыточной инициализации (0, false, null..)
Не инициализируйте переменные с их инициализацией по умолчанию, например, boolean по умолчанию имеет значение false, поэтому избыточно инициализировать его значением false.
String name = null; // избыточно
int speed = 0; // избыточно
boolean isOpen = false; // избыточно
String name;
int speed;
boolean isOpen;
// те же значения в более чистом коде
5. Объявляйте членов класса закрытыми везде, где это возможно, и всегда давайте модификатору доступа максимально ограниченный доступ
public int age; // очень плохо
int age; // плохо
private int age; // хорошо
6. Избегайте использования ключевого слова “new” при создании строки
String s1 = new String("AnyString") ; // плохая реализация
// Конструктор создает новый объект и добавляет литерал в кучу
String s2 = "AnyString" ; // хорошо: быстрое создание экземпляра
// Этот ярлык ссылается на элемент в пуле строк и создает новый объект, только если литерал отсутствует в пуле строк.
7. Для объединения нескольких строк используйте StringBuilder или StringBuffer вместо использования оператора +
Оператор + неэффективен, поскольку компилятор Java создает несколько промежуточных объектов String перед созданием окончательной объединенной строки.
StringBuilder или StringBuffer изменяют String без создания промежуточных объектов String.
String address = streetNumber +" "+ streetName +" "
+cityName+" "+cityNumber+" "+ countryName; // плохо
StringBuilder address = new StringBuilder(streetNumber).append(" ")
.append(streetName).append(" ").append(cityName).append(" ")
.append(cityNumber).append(" ").append(countryName); // хорошо
Учтите, что StringBuilder не потокобезопасен, не синхронизирован, но он быстрее, чем StringBuffer, который потокобезопасен и синхронизирован.
8. Используйте подчеркивание в числовых литералах
int myMoneyInBank = 58356823;
int myMoneyInBank = 58_356_823; // лучше читаемый код
long billsToPay = 1000000000L;
long billsToPay = 1_000_000_000L; // лучше читаемый код
9. Избегайте использования “for loop” с индексами
Не используйте for loop с переменной индекса (или счетчика), если вы можете заменить его расширенным циклом for (начиная с Java 5) или forEach (начиная с Java 8). Это связано с тем, что переменная индекса подвержена ошибкам, поскольку мы можем случайно изменить ее в теле цикла или начать индекс с 1 вместо 0.
for (int i = 0; i < names.length; i++)
{ saveInDb(names[i]); }
for (String name : names)
{ saveInDb(name); } // более чистый код
10. Заменяйте try-catch-finally на try-with-resources
Scanner scanner = null;
try
{scanner = new Scanner(new File("test.txt"));
while (scanner.hasNext())
{System.out.println(scanner.nextLine());}}
catch (FileNotFoundException e)
{e.printStackTrace();}
finally
{if (scanner != null)
{scanner.close();}}
// подвержено ошибкам, так как мы можем забыть закрыть сканер в блоке finally
try (Scanner scanner = new Scanner(new File("test.txt")))
{while (scanner.hasNext())
{System.out.println(scanner.nextLine());}}
catch (FileNotFoundException fnfe)
{fnfe.printStackTrace();}
// чище и более лаконично
▪Читать дальше
Please open Telegram to view this post
VIEW IN TELEGRAM
В этом руководстве подробно рассмотрено, как перебирать Hashmap, используя различные типы циклов в Java.
Как перебрать Hashmap в Java с помощью цикла for-each
Один из самых простых способов перебора Hashmap — использование цикла for-each. Вот пример того, как это сделать:
HashMap<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("Key: " + key + ", Value: " + value);
}
В этом примере мы сначала создаем новый Hashmap и добавляем к нему несколько пар ключ-значение. Затем мы используем цикл for-each для итерации по Hashmap, извлекая каждую пару ключ-значение как объект Map.Entry. Затем мы извлекаем ключ и значение из каждого объекта Map.Entry и выводим их на консоль.
Как выполнить итерацию по Hashmap в Java, используя цикл while с итератором.
Другой способ выполнить итерацию по Hashmap — использовать цикл while с итератором. Перед вами пример того, как это сделать:
HashMap<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("Key: " + key + ", Value: " + value);
}
Здесь мы снова создаем новый Hashmap и добавляем к нему несколько пар ключ-значение. Затем мы создаем новый объект Iterator с помощью метода entrySet(), который возвращает набор пар ключ-значение в виде объектов Map.Entry. Затем мы используем цикл while с методами hasNext() и next() для перебора набора и извлечения каждой пары ключ-значение. И наконец, мы извлекаем ключ и значение из каждого объекта Map.Entry и выводим их на консоль.
Как перебирать Hashmap Java с помощью for loop с keySet()
В Java метод keySet() — это метод класса java.util.HashMap, который возвращает возвращает установленное представление ключей, содержащихся в Hashmap. Это означает, что он возвращает набор всех ключей в Hashmap, которые можно использовать для перебора ключей или выполнения над ними других операций.
То, что метод keySet() возвращает набор уникальных элементов без дубликатов, связано с тем, что ключи в Hashmap должны быть уникальными, а метод keySet() гарантирует, что возвращаемый им набор ключей не содержит повторяющихся значений.
Мы также можем перебирать Hashmap, используя цикл for с методом keySet(). Вот пример того, как это выполнить:
ashMap<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
for (String key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key: " + key + ", Value: " + value);
В данном примере мы снова создаем новый Hashmap и добавляем к ней несколько пар ключ-значение. Затем мы используем цикл for с методом keySet() для итерации по Hashmap, извлечения каждого ключа и использования его для получения соответствующего значения из Hashmap. Затем мы выводим ключ и значение на консоль.Читать полностью
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🧮Как исправлять исключения в Java — подробное руководство
Это руководство поможет вам научиться исправлять распространенные исключения в Java. Помимо теории, вы увидите примеры кода по исправлению таких проблем.
Общие рекомендации по предотвращению исключений в Java
Чтобы избежать появления каких-либо исключений в Java, важно понимать и следовать рекомендациям по кодированию:
1. Всегда проверяйте ввод пользователя, прежде чем использовать его в своем коде.
2. Используйте блоки try-catch, throws, throw, в зависимости от того, что подходит для конкретного сценария.
3. Не пренебрегайте сообщениями в коде об обработках и наличии ошибок. Это поможет определить и исправить проблемы.
4. Обязательно регистрируйте исключения в целях отладки. Вы можете использовать сообщения регистратора, чтобы помочь выявить проблемы.
5. Следуйте рекомендациям по написанию кода, чтобы избежать исключений, и тщательно тестируйте свой код.
6. Обновляйте свои зависимости API, чтобы убедиться, что вы используете самые последние и самые стабильные версии библиотек и фреймворков.
7. Используйте необходимые инструменты и среды тестирования для выявления потенциальных проблем в коде до того, как они вызовут исключения.
8. Отслеживайте производительность вашего приложения и журналы, чтобы быстро выявлять и устранять любые проблемы.
9. Будьте в курсе передовых практик безопасности, чтобы убедиться, что ваш код безопасен и защищен от любых потенциальных атак.
10. Тщательно документируйте свой код и его исключения, чтобы другим разработчикам было легче его понять и поддерживать.
Читать полностью
@javatg
Это руководство поможет вам научиться исправлять распространенные исключения в Java. Помимо теории, вы увидите примеры кода по исправлению таких проблем.
Общие рекомендации по предотвращению исключений в Java
Чтобы избежать появления каких-либо исключений в Java, важно понимать и следовать рекомендациям по кодированию:
1. Всегда проверяйте ввод пользователя, прежде чем использовать его в своем коде.
2. Используйте блоки try-catch, throws, throw, в зависимости от того, что подходит для конкретного сценария.
3. Не пренебрегайте сообщениями в коде об обработках и наличии ошибок. Это поможет определить и исправить проблемы.
4. Обязательно регистрируйте исключения в целях отладки. Вы можете использовать сообщения регистратора, чтобы помочь выявить проблемы.
5. Следуйте рекомендациям по написанию кода, чтобы избежать исключений, и тщательно тестируйте свой код.
6. Обновляйте свои зависимости API, чтобы убедиться, что вы используете самые последние и самые стабильные версии библиотек и фреймворков.
7. Используйте необходимые инструменты и среды тестирования для выявления потенциальных проблем в коде до того, как они вызовут исключения.
8. Отслеживайте производительность вашего приложения и журналы, чтобы быстро выявлять и устранять любые проблемы.
9. Будьте в курсе передовых практик безопасности, чтобы убедиться, что ваш код безопасен и защищен от любых потенциальных атак.
10. Тщательно документируйте свой код и его исключения, чтобы другим разработчикам было легче его понять и поддерживать.
Читать полностью
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
📝Как инициализировать ArrayList в Java.
ArrayList — это реализация изменяемого массива интерфейса List, которая используется для хранения и управления коллекцией похожих переменных. ArrayList напоминает массив, но обеспечивает большую гибкость. Объект ArrayList более динамичен и дает вам широкий контроль над элементами в коллекции.
Как объявить ArrayList со значениями в Java
Объявить ArrayList в Java можно следующим способом:
Перед тем, как использовать ArrayList, вы должны сначала импортировать его из одноименного класса: import java.util.ArrayList;.
После этого вы можете создать новый объект ArrayList. В приведенном выше коде мы создали такой объект под именем people.
Обратите внимание, что тип данных ArrayList указывается в угловых скобках: ArrayList<String>.
Несмотря на то, что мы создали объект ArrayList, в нем пока нет элементов. Далее вы узнаете, как добавлять к нему элементы.
Учтите, что вы можете создать ArrayList со значениями/элементами в точке объявления, используя метод add в блоке инициализатора:
Читать полностью
@javatg
ArrayList — это реализация изменяемого массива интерфейса List, которая используется для хранения и управления коллекцией похожих переменных. ArrayList напоминает массив, но обеспечивает большую гибкость. Объект ArrayList более динамичен и дает вам широкий контроль над элементами в коллекции.
Как объявить ArrayList со значениями в Java
Объявить ArrayList в Java можно следующим способом:
import java.util.ArrayList;
public class ArrayListTut {
public static void main(String[] args) {
ArrayList<String> people = new ArrayList<>();
}
}
Перед тем, как использовать ArrayList, вы должны сначала импортировать его из одноименного класса: import java.util.ArrayList;.
После этого вы можете создать новый объект ArrayList. В приведенном выше коде мы создали такой объект под именем people.
Обратите внимание, что тип данных ArrayList указывается в угловых скобках: ArrayList<String>.
Несмотря на то, что мы создали объект ArrayList, в нем пока нет элементов. Далее вы узнаете, как добавлять к нему элементы.
Учтите, что вы можете создать ArrayList со значениями/элементами в точке объявления, используя метод add в блоке инициализатора:
import java.util.ArrayList;
public class ArrayListTut {
public static void main(String[] args) {
ArrayList<String> people = new ArrayList<>() {{
add("John");
add("Jane");
add("Doe");
}};
System.out.println(people);
// [John, Jane, Doe]
}
}
Читать полностью
@javatg
Error Prone Support -- это инструмент статического анализа для Java, который выявляет распространенные ошибки во время компиляции.
Это библиотека является расширенной версии Error Prone с дополнительными средствами проверки ошибок.
🔍 Документация
#github #java
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🧭Как перебрать Hashmap с помощью цикла
В этом руководстве подробно рассмотрено, как перебирать Hashmap, используя различные типы циклов в Java.
Hashmap — это структура данных, используемая для хранения данных в парах ключ-значение (key-value). Она широко используется во многих языках программирования, включая Java, Python и JavaScript.
Итерация по Hashmap — это обычная операция, которую часто выполняют разработчики. В большинстве случаев ее этапы довольно просты. Сначала вы инициируете Hashmap, затем используете итератор для перебора и, наконец, отображаете результат.
Как перебрать Hashmap в Java с помощью цикла for-each
Один из самых простых способов перебора Hashmap — использование цикла for-each. Вот пример того, как это сделать:
В этом примере мы сначала создаем новый Hashmap и добавляем к нему несколько пар ключ-значение. Затем мы используем цикл for-each для итерации по Hashmap, извлекая каждую пару ключ-значение как объект Map.Entry. Затем мы извлекаем ключ и значение из каждого объекта Map.Entry и выводим их на консоль.
Читать полностью
@javatg
В этом руководстве подробно рассмотрено, как перебирать Hashmap, используя различные типы циклов в Java.
Hashmap — это структура данных, используемая для хранения данных в парах ключ-значение (key-value). Она широко используется во многих языках программирования, включая Java, Python и JavaScript.
Итерация по Hashmap — это обычная операция, которую часто выполняют разработчики. В большинстве случаев ее этапы довольно просты. Сначала вы инициируете Hashmap, затем используете итератор для перебора и, наконец, отображаете результат.
Как перебрать Hashmap в Java с помощью цикла for-each
Один из самых простых способов перебора Hashmap — использование цикла for-each. Вот пример того, как это сделать:
HashMap<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("Key: " + key + ", Value: " + value);
}
В этом примере мы сначала создаем новый Hashmap и добавляем к нему несколько пар ключ-значение. Затем мы используем цикл for-each для итерации по Hashmap, извлекая каждую пару ключ-значение как объект Map.Entry. Затем мы извлекаем ключ и значение из каждого объекта Map.Entry и выводим их на консоль.
Читать полностью
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
В чем различия между equals и compareTo в Java
Из этого гайда вы узнаете о различиях между методами equals() и compareTo(), а также посмотрите на примеры их применения в языке Java.
Java предоставляет разработчикам два метода для сравнения объектов: equals() и compareTo(). Они используются для сравнения объектов, но при этом у них разные цели и реализации.
Equals()
Метод equals() применяют для сравнения объектов на равенство. Он возвращает true, если два объекта равны, и false, если они не равны. По умолчанию метод equals() в Java сравнивает объекты на основе их расположения в памяти. Иными словами, если у двух объектов одинаковый адрес в памяти, они считаются равными друг другу.
Однако мы можем переопределить реализацию equals() по умолчанию, чтобы сравнивать объекты на основе их свойств. Давайте рассмотрим простой пример, чтобы увидеть, как это работает.
Пример: реализация equals() с идентификатором
Предположим, у нас есть класс Person, который содержит имя и идентификатор (ID). Мы хотим сравнить два объекта Person по их идентификатору, а не по их расположению в памяти. Вот реализация метода equals(), который сравнивает объекты Person по их идентификатору:
В этой реализации мы сначала проверяем аргумент на соответствие null или не является ли он экземпляром класса Person. Если любое из этих условий true, мы возвращаем false. Если аргумент является экземпляром класса Person, мы приводим его к объекту Person и сравниваем его идентификатор с идентификатором текущего объекта. Если идентификаторы равны, то мы возвращаем true, указывая, что два объекта равны.
Продолжение
@javatg
Из этого гайда вы узнаете о различиях между методами equals() и compareTo(), а также посмотрите на примеры их применения в языке Java.
Java предоставляет разработчикам два метода для сравнения объектов: equals() и compareTo(). Они используются для сравнения объектов, но при этом у них разные цели и реализации.
Equals()
Метод equals() применяют для сравнения объектов на равенство. Он возвращает true, если два объекта равны, и false, если они не равны. По умолчанию метод equals() в Java сравнивает объекты на основе их расположения в памяти. Иными словами, если у двух объектов одинаковый адрес в памяти, они считаются равными друг другу.
Однако мы можем переопределить реализацию equals() по умолчанию, чтобы сравнивать объекты на основе их свойств. Давайте рассмотрим простой пример, чтобы увидеть, как это работает.
Пример: реализация equals() с идентификатором
Предположим, у нас есть класс Person, который содержит имя и идентификатор (ID). Мы хотим сравнить два объекта Person по их идентификатору, а не по их расположению в памяти. Вот реализация метода equals(), который сравнивает объекты Person по их идентификатору:
public class Person {
private String name;
private int id;
public Person(String name, int id) {
this.name = name;
this.id = id;
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) {
return false;
}
Person person = (Person) o;
return id == person.id;
}
}
В этой реализации мы сначала проверяем аргумент на соответствие null или не является ли он экземпляром класса Person. Если любое из этих условий true, мы возвращаем false. Если аргумент является экземпляром класса Person, мы приводим его к объекту Person и сравниваем его идентификатор с идентификатором текущего объекта. Если идентификаторы равны, то мы возвращаем true, указывая, что два объекта равны.
Продолжение
@javatg