From 33860754131e76ed7c26722142333a622d39267e Mon Sep 17 00:00:00 2001 From: Saveliy21 Date: Mon, 3 Apr 2023 15:21:22 +0500 Subject: [PATCH 1/6] task-3.2 --- .idea/compiler.xml | 3 + .idea/uiDesigner.xml | 124 ++++++++++++++++++++++++++ src/main/java/org/example/Bar.java | 25 ++++++ src/main/java/org/example/Ticket.java | 18 ++++ 4 files changed, 170 insertions(+) create mode 100644 .idea/uiDesigner.xml create mode 100644 src/main/java/org/example/Bar.java create mode 100644 src/main/java/org/example/Ticket.java 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..b1f9e35 --- /dev/null +++ b/src/main/java/org/example/Bar.java @@ -0,0 +1,25 @@ +package org.example; + +import java.util.HashMap; +import java.util.Map; + +public class Bar { + + /* Я выбрал именно HashMap, потому что добавление и получение элементов у нас работают за O(1), + при условии, что хэш функция определена нормально. + Я определил её в классе Ticket как сам номер билета, переведённый в 10-тичную запись. + Не уверен насчёт корректности самой map и класса Ticket, но у меня были мысли такие, что + в классе Ticket у нас может быть много различных полей, например: время и дата покупки, Id кассира и многое другое. + А поскольку нас интересуют только сам номер билета и доп. продукты к нему на баре, + мы заводим map только с этими полями. + */ + public Map tickets = new HashMap<>(); + + public void addVisitors(String hexadecimalNumber, String additions){ + Ticket ticket = new Ticket(hexadecimalNumber, additions); + tickets.put(ticket.hexadecimalNumber, ticket.additions); + } + public String getProduct(String number){ + return tickets.get(number); + } +} diff --git a/src/main/java/org/example/Ticket.java b/src/main/java/org/example/Ticket.java new file mode 100644 index 0000000..122644d --- /dev/null +++ b/src/main/java/org/example/Ticket.java @@ -0,0 +1,18 @@ +package org.example; + +public class Ticket { + + public String hexadecimalNumber; + public String additions; + + + public Ticket(String hexadecimalNumber, String additions){ + this.hexadecimalNumber =hexadecimalNumber; + this.additions = additions; + } + + @Override + public int hashCode(){ + return Integer.parseInt(hexadecimalNumber, 16); + } +} From 7437d428f3c561234bcaeadd1b04469cf0c77fda Mon Sep 17 00:00:00 2001 From: Saveliy21 Date: Mon, 3 Apr 2023 16:19:22 +0500 Subject: [PATCH 2/6] task-3.2 update --- src/main/java/org/example/Ticket.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/org/example/Ticket.java b/src/main/java/org/example/Ticket.java index 122644d..c75cde9 100644 --- a/src/main/java/org/example/Ticket.java +++ b/src/main/java/org/example/Ticket.java @@ -11,6 +11,18 @@ public Ticket(String hexadecimalNumber, String additions){ this.additions = additions; } + @Override + public boolean equals(Object o){ + if(o == this){ + return true; + } + if(!(o instanceof Ticket)){ + return false; + } + Ticket ticket = (Ticket)o; + return ticket.hexadecimalNumber.equals(hexadecimalNumber) && ticket.additions.equals(additions); + } + @Override public int hashCode(){ return Integer.parseInt(hexadecimalNumber, 16); From 2a471d15daf40c86426c3394b38539066b1e97cf Mon Sep 17 00:00:00 2001 From: Saveliy21 Date: Mon, 3 Apr 2023 17:02:58 +0500 Subject: [PATCH 3/6] task-3.2 final --- src/main/java/org/example/Bar.java | 16 ++++++-------- src/main/java/org/example/Ticket.java | 30 --------------------------- 2 files changed, 6 insertions(+), 40 deletions(-) delete mode 100644 src/main/java/org/example/Ticket.java diff --git a/src/main/java/org/example/Bar.java b/src/main/java/org/example/Bar.java index b1f9e35..c054324 100644 --- a/src/main/java/org/example/Bar.java +++ b/src/main/java/org/example/Bar.java @@ -3,22 +3,18 @@ import java.util.HashMap; import java.util.Map; -public class Bar { +public class Bar{ /* Я выбрал именно HashMap, потому что добавление и получение элементов у нас работают за O(1), - при условии, что хэш функция определена нормально. - Я определил её в классе Ticket как сам номер билета, переведённый в 10-тичную запись. - Не уверен насчёт корректности самой map и класса Ticket, но у меня были мысли такие, что - в классе Ticket у нас может быть много различных полей, например: время и дата покупки, Id кассира и многое другое. - А поскольку нас интересуют только сам номер билета и доп. продукты к нему на баре, - мы заводим map только с этими полями. + при условии, что хэш функция определена нормально, если я прав, то тут мы сраваниваем строки, а для String метод + equals() уже переопределён, а значит и hashCode() тоже (по идее). */ public Map tickets = new HashMap<>(); - public void addVisitors(String hexadecimalNumber, String additions){ - Ticket ticket = new Ticket(hexadecimalNumber, additions); - tickets.put(ticket.hexadecimalNumber, ticket.additions); + 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/Ticket.java b/src/main/java/org/example/Ticket.java deleted file mode 100644 index c75cde9..0000000 --- a/src/main/java/org/example/Ticket.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.example; - -public class Ticket { - - public String hexadecimalNumber; - public String additions; - - - public Ticket(String hexadecimalNumber, String additions){ - this.hexadecimalNumber =hexadecimalNumber; - this.additions = additions; - } - - @Override - public boolean equals(Object o){ - if(o == this){ - return true; - } - if(!(o instanceof Ticket)){ - return false; - } - Ticket ticket = (Ticket)o; - return ticket.hexadecimalNumber.equals(hexadecimalNumber) && ticket.additions.equals(additions); - } - - @Override - public int hashCode(){ - return Integer.parseInt(hexadecimalNumber, 16); - } -} From 0c98f7d069e5e177d1a0bb7fae97bb9a2646ba3f Mon Sep 17 00:00:00 2001 From: Saveliy21 Date: Mon, 3 Apr 2023 18:36:09 +0500 Subject: [PATCH 4/6] task-3.4 incomplete --- src/main/java/org/example/Book.java | 31 ++++++++++++++++++++++ src/main/java/org/example/library.java | 36 ++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/main/java/org/example/Book.java create mode 100644 src/main/java/org/example/library.java diff --git a/src/main/java/org/example/Book.java b/src/main/java/org/example/Book.java new file mode 100644 index 0000000..128424f --- /dev/null +++ b/src/main/java/org/example/Book.java @@ -0,0 +1,31 @@ +package org.example; + +public class Book { + + String title; + String author; + Integer yearOfPublication; + + @Override + public boolean equals(Object o){ + if(o == this){ + return true; + } + if (! (o instanceof Book)){ + return false; + } + Book book = (Book) o; + return book.yearOfPublication.equals(yearOfPublication) && + book.title.equals(title) && + book.author.equals(author); + } + + @Override + public int hashCode(){ + int hash = 7; + hash = 31 * hash + yearOfPublication; + hash = 31 * hash + (title == null ? 0 : title.hashCode()); + hash = 31 * hash + (author == null ? 0 : author.hashCode()); + return hash; + } +} diff --git a/src/main/java/org/example/library.java b/src/main/java/org/example/library.java new file mode 100644 index 0000000..13b5825 --- /dev/null +++ b/src/main/java/org/example/library.java @@ -0,0 +1,36 @@ +package org.example; + +import java.util.*; + +public class library { + + + public Map library = new LinkedHashMap<>(); + + public Set lib = new LinkedHashSet<>(); + + + public void addBook(Book book){ + library.put(book, book.hashCode()); + } + + public void removeBook(Book book){ + library.remove(book); + } + + public List getFromTitle(String title){ + + } + + public Book getFromAuthor(String author){ + + } + + public Book getFromYear(Integer year){ + + } + + public Book getFromIntervalOfPublic(){ + + } +} From fac677bb44ed678eb2e88c3658dbe555967f3905 Mon Sep 17 00:00:00 2001 From: Saveliy21 Date: Mon, 3 Apr 2023 19:31:21 +0500 Subject: [PATCH 5/6] task-3.4 final --- src/main/java/org/example/Book.java | 23 ++--------- src/main/java/org/example/library.java | 57 ++++++++++++++++++++------ 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/example/Book.java b/src/main/java/org/example/Book.java index 128424f..8f0a074 100644 --- a/src/main/java/org/example/Book.java +++ b/src/main/java/org/example/Book.java @@ -6,26 +6,9 @@ public class Book { String author; Integer yearOfPublication; - @Override - public boolean equals(Object o){ - if(o == this){ - return true; - } - if (! (o instanceof Book)){ - return false; - } - Book book = (Book) o; - return book.yearOfPublication.equals(yearOfPublication) && - book.title.equals(title) && - book.author.equals(author); - } - @Override - public int hashCode(){ - int hash = 7; - hash = 31 * hash + yearOfPublication; - hash = 31 * hash + (title == null ? 0 : title.hashCode()); - hash = 31 * hash + (author == null ? 0 : author.hashCode()); - return hash; + public Integer getYear(){ + return this.yearOfPublication; } + } diff --git a/src/main/java/org/example/library.java b/src/main/java/org/example/library.java index 13b5825..8a6889d 100644 --- a/src/main/java/org/example/library.java +++ b/src/main/java/org/example/library.java @@ -5,13 +5,19 @@ public class library { - public Map library = new LinkedHashMap<>(); - - public Set lib = new LinkedHashSet<>(); - + /* + Я очень долго мучался с выбором более сложной коллекции, но у меня + возникали большие трусдности с реализацией методов поиска, поэтому я решил + обратиться к листам, выбор пал на LinkedList т.к. к элементам по индексу мы почти не обращаемся + а вставка/ удаление будет происходить чаще и быстрее засчёт двусвязного списка. + сами же операции будут проходить за O(n) т.к. в каждом методе мы итерируемся по коллекции до n-го элемента. + последний метод getFromIntervalOfPublic тоже будет за O(n) т.к. я сделал сортировку по годам. + */ + public List library = new LinkedList<>(); public void addBook(Book book){ - library.put(book, book.hashCode()); + library.add(book); + library.sort(Comparator.comparing(Book::getYear)); } public void removeBook(Book book){ @@ -19,18 +25,45 @@ public void removeBook(Book book){ } public List getFromTitle(String title){ - + List result = new LinkedList<>(); + for(Book book : library){ + if(Objects.equals(book.title, title)){ + result.add(book); + } + } + return result; } - public Book getFromAuthor(String author){ - + public List getFromAuthor(String author){ + List result = new LinkedList<>(); + for(Book book : library){ + if(Objects.equals(book.author, author)){ + result.add(book); + } + } + return result; } - public Book getFromYear(Integer year){ - + public List getFromYear(Integer year){ + List result = new LinkedList<>(); + for(Book book : library){ + if(Objects.equals(book.getYear(), year)){ + result.add(book); + } + } + return result; } - public Book getFromIntervalOfPublic(){ - + // выдаст все книги [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; } } From 2c978c6b4ea2280d97afcfe141dafc64941cd8ad Mon Sep 17 00:00:00 2001 From: Saveliy21 Date: Mon, 3 Apr 2023 19:32:18 +0500 Subject: [PATCH 6/6] task-3.4 final --- src/main/java/org/example/Book.java | 7 +++++++ src/main/java/org/example/library.java | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/example/Book.java b/src/main/java/org/example/Book.java index 8f0a074..846faa1 100644 --- a/src/main/java/org/example/Book.java +++ b/src/main/java/org/example/Book.java @@ -11,4 +11,11 @@ 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 index 8a6889d..65d5435 100644 --- a/src/main/java/org/example/library.java +++ b/src/main/java/org/example/library.java @@ -27,7 +27,7 @@ public void removeBook(Book book){ public List getFromTitle(String title){ List result = new LinkedList<>(); for(Book book : library){ - if(Objects.equals(book.title, title)){ + if(Objects.equals(book.getTitle(), title)){ result.add(book); } } @@ -37,7 +37,7 @@ public List getFromTitle(String title){ public List getFromAuthor(String author){ List result = new LinkedList<>(); for(Book book : library){ - if(Objects.equals(book.author, author)){ + if(Objects.equals(book.getAuthor(), author)){ result.add(book); } }