diff --git a/.idea/compiler.xml b/.idea/compiler.xml index bfd703e..017426c 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -9,5 +9,8 @@ + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/example/Bar.java b/src/main/java/org/example/Bar.java new file mode 100644 index 0000000..c054324 --- /dev/null +++ b/src/main/java/org/example/Bar.java @@ -0,0 +1,21 @@ +package org.example; + +import java.util.HashMap; +import java.util.Map; + +public class Bar{ + + /* Я выбрал именно HashMap, потому что добавление и получение элементов у нас работают за O(1), + при условии, что хэш функция определена нормально, если я прав, то тут мы сраваниваем строки, а для String метод + equals() уже переопределён, а значит и hashCode() тоже (по идее). + */ + public Map tickets = new HashMap<>(); + + public void addVisitor(String hexadecimalNumber, String additions){ + tickets.put(hexadecimalNumber, additions); + } + + public String getProduct(String number){ + return tickets.get(number); + } +} diff --git a/src/main/java/org/example/Book.java b/src/main/java/org/example/Book.java new file mode 100644 index 0000000..846faa1 --- /dev/null +++ b/src/main/java/org/example/Book.java @@ -0,0 +1,21 @@ +package org.example; + +public class Book { + + String title; + String author; + Integer yearOfPublication; + + + public Integer getYear(){ + return this.yearOfPublication; + } + + public String getTitle(){ + return this.title; + } + + public String getAuthor(){ + return this.author; + } +} diff --git a/src/main/java/org/example/library.java b/src/main/java/org/example/library.java new file mode 100644 index 0000000..65d5435 --- /dev/null +++ b/src/main/java/org/example/library.java @@ -0,0 +1,69 @@ +package org.example; + +import java.util.*; + +public class library { + + + /* + Я очень долго мучался с выбором более сложной коллекции, но у меня + возникали большие трусдности с реализацией методов поиска, поэтому я решил + обратиться к листам, выбор пал на LinkedList т.к. к элементам по индексу мы почти не обращаемся + а вставка/ удаление будет происходить чаще и быстрее засчёт двусвязного списка. + сами же операции будут проходить за O(n) т.к. в каждом методе мы итерируемся по коллекции до n-го элемента. + последний метод getFromIntervalOfPublic тоже будет за O(n) т.к. я сделал сортировку по годам. + */ + public List library = new LinkedList<>(); + + public void addBook(Book book){ + library.add(book); + library.sort(Comparator.comparing(Book::getYear)); + } + + public void removeBook(Book book){ + library.remove(book); + } + + public List getFromTitle(String title){ + List result = new LinkedList<>(); + for(Book book : library){ + if(Objects.equals(book.getTitle(), title)){ + result.add(book); + } + } + return result; + } + + public List getFromAuthor(String author){ + List result = new LinkedList<>(); + for(Book book : library){ + if(Objects.equals(book.getAuthor(), author)){ + result.add(book); + } + } + return result; + } + + public List getFromYear(Integer year){ + List result = new LinkedList<>(); + for(Book book : library){ + if(Objects.equals(book.getYear(), year)){ + result.add(book); + } + } + return result; + } + + // выдаст все книги [start;end], где start - начальный год, end - конечный + public List getFromIntervalOfPublic(int start, int end){ + List result = new LinkedList<>(); + for(Book book : library){ + if(book.getYear() >= start){ + result.add(book); + } + if(book.getYear() > end) + break; + } + return result; + } +}