Skip to content
25 changes: 25 additions & 0 deletions src/com/school/faang/hashmap/задача_1/Solution.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,32 @@
package com.school.faang.hashmap.задача_1;

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

public class Solution {
private final Map<String, Integer> likesMap = new HashMap<>();

private void likeVideo(String videoId) {
likesMap.put(videoId, getLikes(videoId) + 1);
}

private int getLikes(String videoId) {
return likesMap.getOrDefault(videoId, 0);
}

public static void main(String[] args) {
Main main = new Main();

main.likeVideo("dQw4w9WgXcQ");
main.likeVideo("dQw4w9WgXcQ");
main.likeVideo("xvFZjo5PgG0");
main.likeVideo("dQw4w9WgXcQ");
main.likeVideo("xvFZjo5PgG0");
main.likeVideo("abcdefgh1234");

System.out.println("Likes for dQw4w9WgXcQ: " + main.getLikes("dQw4w9WgXcQ"));
System.out.println("Likes for xvFZjo5PgG0: " + main.getLikes("xvFZjo5PgG0"));
System.out.println("Likes for abcdefgh1234: " + main.getLikes("abcdefgh1234"));
System.out.println("Likes for unknownID: " + main.getLikes("unknownID"));
}
}
24 changes: 24 additions & 0 deletions src/com/school/faang/hashmap/задача_2/Solution.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,30 @@

public class Solution {
public static void main(String[] args) {
UserManager manager = new UserManager();

manager.addUser(new User(1, "Volodymyr Nemirniy", "22.06.2025"));
manager.addUser(new User(2, "Alex Novakov", "18.04.2024"));
manager.addUser(new User(3, "Nastya Mirnaya", "06.01.2022"));
manager.addUser(new User(4, "Marina Bro", "08.08.2025"));

manager.getUsers();
}

private record User(long userId, String fullName, String registrationDate) {
}

private static class UserManager {
private final Map<String, User> users = new HashMap<>();

public void addUser(User user) {
users.put(user.fullName(), user);
}

public void getUsers() {
for (Map.Entry<String, User> entry : users.entrySet()) {
System.out.println("Пользователь @" + entry.getKey() + ", полное имя: " + entry.getValue().fullName());
}
}
}
}
44 changes: 44 additions & 0 deletions src/com/school/faang/hashmap/задача_3/Solution.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,50 @@

public class Solution {
public static void main(String[] args) {
ProductManager manager = new ProductManager();

manager.addProduct(new Product("1", "Айфон"));
manager.addProduct(new Product("1", "Айфон"));
manager.addProduct(new Product("2", "Ноутбук"));

manager.showProducts();
}

public record Product(String productId, String name) {

@Override
public String toString() {
return "Product{" +
"productId='" + productId + '\'' +
", name='" + name + '\'' +
'}';
}

@Override
public int hashCode() {
return Objects.hash(productId);
}

@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof Product other)) return false;

return Objects.equals(this.productId, other.productId);
}
}

public class ProductManager {
private final Map<Product, Integer> products = new HashMap<>();

public void addProduct(Product product) {
products.put(product, products.getOrDefault(product, 0) + 1);
}

public void showProducts() {
for (Map.Entry<Product, Integer> entry : products.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
}
35 changes: 35 additions & 0 deletions src/com/school/faang/hashmap/задача_4/Solution.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,41 @@

public class Solution {
public static void main(String[] args) {
List<String> lists = new ArrayList<>(
List.of(
"Bohemian Rhapsody - Rock",
"Smells Like Teen Spirit - Rock",
"Shape of You - Pop",
"Blinding Lights - Pop",
"The - Hills - Pop",
"Lose Yourself - Hip-Hop"
)
);

Map<String, List<String>> listMap = new HashMap<>();

for (String list : lists) {
int lastSpaceIndex = list.lastIndexOf(" - ");

if (lastSpaceIndex == -1) {
System.out.println("Last word: " + list);
} else {
String name = list.substring(0, lastSpaceIndex);
String genre = list.substring(lastSpaceIndex + 3);

if (listMap.containsKey(genre)) {
listMap.get(genre).add(name);
} else {
List<String> songs = new ArrayList<>();
songs.add(name);

listMap.put(genre, songs);
}
}
}

for (Map.Entry<String, List<String>> entry : listMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
33 changes: 33 additions & 0 deletions src/com/school/faang/hashmap/задача_5/Solution.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,39 @@

public class Solution {
public static void main(String[] args) {
String text = "Занятия спортом — один из наиболее доступных и простых способов укрепить свое здоровье, " +
"продлить себе жизнь и вообще изменить самого себя в лучшую сторону. Большинство людей относится к физическим упражнениям либо со скепсисом(«да ладно, ничего серьезного они мне не дадут»), либо с некоторым пренебрежением («оно, конечно, хорошо, но других дел хватает»)\n" +
"На самом же деле ежедневные занятия спортом, даже на протяжении получаса, способны оказать значительное воздействие на физическое и психологическое состояние человека.\n" +
"Давайте просто зададимся вопросом: «А что такое занятия спортом?». Разумеется, речь не идет о большом спорте, который становится для его участников профессией. Там и нагрузки бывают запредельными, и допинг участники соревнований, если говорить честно, используют регулярно. Но это работа, которая приносит спортсменам доход и от которой зависит их благосостояние.\n" +
"Мы же сейчас совсем о другом — любительском спорте, который не является главной составляющей жизни, но может быть очень полезным приложением к ней.\n" +
"Если человек начинает заниматься спортом, это мгновенно дает ему один плюс — он тренирует свою дисциплинированность. Невозможно ежедневно (или несколько раз в неделю) посвящать свое время некоторому занятию и при этом не контролировать свое поведение.\n" +
"Приходится следить за тем, чтобы на спорт оставалось время (нередко это строго определенный отрезок в течение дня), чтобы организм был к этим занятиям готов (в совершенно убитом состоянии особо не побегаешь). Да и сам спортивный процесс требует контроля и концентрации.\n" +
"Таким образом, человек, посвящающий даже полчаса своего свободного времени спорту и настроенный делать это продолжительное время, привыкает к дисциплине, к определенным жестким требованиям, пренебречь которыми нельзя. Если у него в остальной жизни с этим наблюдаются какие-либо проблемы, занятия спортом обязательно помогут.\n" +
"Причем это, как вы понимаете, всего лишь косвенная польза, но даже она может иметь огромное значение. Следующий пункт — состояние организма в целом. Современный ритм жизни вынуждает человека проводить огромные периоды времени в позах, которые крайне вредны для нашего здоровья: кто-то слишком много сидит, кому-то приходится подолгу стоять на одном месте, у кого-то естественным положением является буква «зю».\n" +
"Все это приводит к нарушениям кровообращения и другим процессам, которые не всегда заметны в настоящем, но грозят серьезнейшими проблемами в будущем. Да и когда человек отдыхает, он чаще всего лишь усугубляет ситуацию — один, отсидев полный рабочий день за компьютером в офисе, дома продолжает заниматься тем же самым, другой стоит за прилавком в магазине, а, вернувшись домой, стирает вещи, согнувшись в три погибели. И так далее.\n" +
"А наше тело — не идеальный механизм, для него тоже существуют правила эксплуатации, и когда они регулярно и стабильно нарушаются, он начинает очень быстро изнашиваться.\n" +
"Занятия спортом в этом плане — отличное средство изменить ситуацию. Различные упражнения и игры придумывались и оттачивались годами, в них давным-давно сконцентрированы те операции, которые человеку необходимо проделывать со своим организмом, чтобы держать его в тонусе.\n" +
"Вам даже не нужно задумываться над тем, почему вы выполняете то или иное упражнение, просто следуйте рекомендациям. Это как в музыке — не стоит думать о том, почему классическое расположение пальцев на гитаре является наиболее удобным, достаточно просто знать, что это так.".toLowerCase();

text = text.replaceAll("[^a-zа-яё\\s]", "");
text = text.replaceAll("\\s+", " ");
text = text.toLowerCase();

String[] words = text.split("\\s+");
Map<String, Integer> w = new HashMap<>();

for (String word : words) {
if (w.containsKey(word)) {
w.put(word, w.get(word) + 1);
} else {
w.put(word, 1);
}
}

for (Map.Entry<String, Integer> entry : w.entrySet()) {
if (entry.getValue() > 5) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
}
57 changes: 57 additions & 0 deletions src/com/school/faang/hashmap/задача_6/Solution.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,63 @@

public class Solution {
public static void main(String[] args) {
Tweet tweetOne = new Tweet("@anna", List.of("#java", "#programming"));
Tweet tweetTwo = new Tweet("@ivan", List.of("#java"));
Tweet tweetThree = new Tweet("@ivan", List.of("#java"));
Tweet tweetFour = new Tweet("@ivan", List.of("#java"));
Tweet tweetFive = new Tweet("@ivan", List.of("#java"));

List<Tweet> tweets = List.of(tweetOne, tweetTwo, tweetThree, tweetFour, tweetFive);

for (Map.Entry<String, String> entry : findTopAuthors(tweets).entrySet()) {
System.out.println("Хештег: " + entry.getKey() + " → Топ автор: " + entry.getValue());
}
}

private static Map<String, String> findTopAuthors(List<Tweet> tweets) {
Map<String, Map<String, Integer>> hashtagStats = new HashMap<>();

for (Tweet tweet : tweets) {
String author = tweet.author();

for (String hashtag : tweet.hashtags()) {
hashtagStats
.computeIfAbsent(hashtag, _ -> new HashMap<>())
.merge(author, 1, Integer::sum);
}
}

Map<String, String> topAuthors = new HashMap<>();

for (Map.Entry<String, Map<String, Integer>> entry : hashtagStats.entrySet()) {
String hashtag = entry.getKey();
Map<String, Integer> authorStats = entry.getValue();

String topAuthor = null;
int maxCount = 0;

for (Map.Entry<String, Integer> authorEntry : authorStats.entrySet()) {
if (topAuthor == null || authorEntry.getValue() > maxCount) {
topAuthor = authorEntry.getKey();
maxCount = authorEntry.getValue();
}
}

topAuthors.put(hashtag, topAuthor);
}

return topAuthors;
}

public record Tweet(String author, List<String> hashtags) {

@Override
public String toString() {
return "Tweet{" +
"author='" + author + '\'' +
", hashtags=" + hashtags +
'}';
}
}

}
45 changes: 45 additions & 0 deletions src/com/school/faang/hashset/задача_1/Solution.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,52 @@
package com.school.faang.hashset.задача_1;

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

public class Solution {
public static void main(String[] args) {
EventRegistration registration = new EventRegistration();

registration.register("[email protected]");
registration.register("[email protected]");
registration.register("[email protected]");
registration.register("[email protected]");

System.out.println(registration.getParticipantCount());
System.out.println(registration.isRegistered("[email protected]"));
}

private static class EventRegistration {
private final Set<String> registeredEmails = new HashSet<>();

public void register(String email) {
if (registeredEmails.contains(email)) {
System.out.println("Ошибка: пользователь с email '" + email + "' уже зарегистрирован.");
return;
}

registeredEmails.add(email);
System.out.println("Регистрация для '" + email + "' прошла успешно!");
}

public int getParticipantCount() {
return registeredEmails.size();
}

public String isRegistered(String email) {
return registeredEmails.contains(email) ? email + ", зарегистрирован в системе" : "Не существует";
}

public Set<String> getRegisteredEmails() {
return Collections.unmodifiableSet(registeredEmails);
}

@Override
public String toString() {
return "EventRegistration{" +
"registeredEmails=" + registeredEmails +
'}';
}
}
}
53 changes: 53 additions & 0 deletions src/com/school/faang/hashset/задача_2/Solution.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,60 @@
package com.school.faang.hashset.задача_2;

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

public class Solution {
public static void main(String[] args) {
UserBlackList blackList = new UserBlackList();

blackList.blockUser("alice");
blackList.blockUser("bob");
blackList.blockUser("alice");

System.out.println("Is bob blocked? " + blackList.isUserBlocked("bob"));

blackList.unblockUser("bob");
System.out.println("Is bob blocked? " + blackList.isUserBlocked("bob"));

blackList.blockUser(null);
System.out.println("Is null blocked? " + blackList.isUserBlocked(null));
blackList.unblockUser(null);

System.out.println("Is null blocked? " + blackList.isUserBlocked(null));
}

private static class UserBlackList {
private final Set<String> blockedUsers = new HashSet<>();

public void blockUser(String username) {
if (blockedUsers.contains(username)) {
System.out.println("This user is already blocked");
return;
}

blockedUsers.add(username);
System.out.println("User " + username + " is blocked");
}

public void unblockUser(String username) {
if (!blockedUsers.contains(username)) {
System.out.println("This user is not blocked");
return;
}

blockedUsers.remove(username);
System.out.println("User " + username + " is unblocked");
}

public boolean isUserBlocked(String username) {
return blockedUsers.contains(username);
}

@Override
public String toString() {
return "UserBlackList{" +
"blockedUsers=" + blockedUsers +
'}';
}
}
}
Loading