diff --git a/lesson/lesson1.md b/lesson/lesson1.md index 6c2f6331..0c0c46b0 100644 --- a/lesson/lesson1.md +++ b/lesson/lesson1.md @@ -67,7 +67,7 @@ ![Screenshot_5](https://user-images.githubusercontent.com/29703461/199550057-fce7cf3c-7040-422f-b490-7b85b47ae952.png) -- Реализуйте методы `save, get, delete, clear, getAll, size` в классе `ArrayStorage`, организовав хранение резюме в массиве +- Реализуйте методы `save, get, delete, clear, getAll, size` в классе `com.javaops.webapp.storage.ArrayStorage`, организовав хранение резюме в массиве - Храните все резюме в начале `storage` (без пустот в виде `null`), чтобы не перебирать каждый раз все 10_000 элементов - При реализации метода `delete` учитывайте, что после удаления резюме между оставшимися резюме не должно быть пустых ячеек, заполненных null ``` @@ -77,7 +77,7 @@ r1, r2, r3,..., rn, null, null,..., null <----- size -----> <------- storage.length (10000) -------> ``` -- Проверьте вашу реализацию с помощью классов `MainArray.main()` и `MainTestArrayStorage.main()` +- Проверьте вашу реализацию с помощью классов `com.javaops.webapp.MainArray.main()` и `com.javaops.webapp.MainTestArrayStorage.main()` - Изучите дополнительные материалы по IntelliJ IDEA: - [Idea Wiki](https://github.com/JavaOPs/topjava/wiki/IDEA) - [Отладка Java кода в IDEA. Основные возможности отладчика](https://youtu.be/Z1BQsf0A4xY) @@ -96,11 +96,11 @@ r1, r2, r3,..., rn, null, null,..., null 1. Перед каждым коммитом не забывайте пользоваться сочетанием клавиш `Ctrl + Alt + L` (автоматическое форматирование кода) 1. Удаляйте в классах неиспользуемые импорты (`Ctrl + Alt + O`) 1. Не игнорируй подсказки IDEA (подсвечивает) -1. В методе `clear()` обнуление массива предполагает обнуление (null) ячеек, где хранятся Resume, а не создание нового или присваивание ему null +1. В методе `clear()` обнуление массива предполагает обнуление (null) ячеек, где хранятся com.javaops.webapp.model.Resume, а не создание нового или присваивание ему null 1. При реализации методов не используйте коллекции -1. Не меняйте сигнатуры методов в `ArrayStorage` -1. Не добавляйте в `Resume` новые поля -1. Resume r — давайте переменным осмысленные имена, например resume. r допустимо в коротких циклах и лямбда-выражениях +1. Не меняйте сигнатуры методов в `com.javaops.webapp.storage.ArrayStorage` +1. Не добавляйте в `com.javaops.webapp.model.Resume` новые поля +1. com.javaops.webapp.model.Resume r — давайте переменным осмысленные имена, например resume. r допустимо в коротких циклах и лямбда-выражениях ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 5. [Вебинар "Быть программистом: от детства к зрелости"](https://www.youtube.com/watch?v=D5Hej0TyLaU) - [Слайды вебинара](https://docs.google.com/presentation/d/1YwtCCZsaGMdl-V15kTDHiJxiS52IAl-qqheNPpiNr54/) diff --git a/src/ArrayStorage.java b/src/ArrayStorage.java deleted file mode 100644 index 7aff0388..00000000 --- a/src/ArrayStorage.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Array based storage for Resumes - */ -public class ArrayStorage { - Resume[] storage = new Resume[10000]; - - void clear() { - } - - void save(Resume r) { - } - - Resume get(String uuid) { - return null; - } - - void delete(String uuid) { - } - - /** - * @return array, contains only Resumes in storage (without null) - */ - Resume[] getAll() { - return new Resume[0]; - } - - int size() { - return 0; - } -} diff --git a/src/Resume.java b/src/Resume.java deleted file mode 100644 index 8de4e4b8..00000000 --- a/src/Resume.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Initial resume class - */ -public class Resume { - - // Unique identifier - String uuid; - - @Override - public String toString() { - return uuid; - } -} diff --git a/src/MainArray.java b/src/com/javaops/webapp/MainArray.java similarity index 86% rename from src/MainArray.java rename to src/com/javaops/webapp/MainArray.java index 063364db..4e6cbaa9 100644 --- a/src/MainArray.java +++ b/src/com/javaops/webapp/MainArray.java @@ -1,13 +1,19 @@ +package com.javaops.webapp; + +import com.javaops.webapp.model.Resume; +import com.javaops.webapp.storage.ArrayStorage; +import com.javaops.webapp.storage.Storage; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** - * Interactive test for ArrayStorage implementation + * Interactive test for com.javaops.webapp.storage.ArrayStorage implementation * (just run, no need to understand) */ public class MainArray { - private final static ArrayStorage ARRAY_STORAGE = new ArrayStorage(); + private final static Storage ARRAY_STORAGE = new ArrayStorage(); public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); @@ -32,7 +38,7 @@ public static void main(String[] args) throws IOException { break; case "save": r = new Resume(); - r.uuid = uuid; + r.setUuid(uuid); ARRAY_STORAGE.save(r); printAll(); break; diff --git a/src/MainTestArrayStorage.java b/src/com/javaops/webapp/MainTestArrayStorage.java similarity index 67% rename from src/MainTestArrayStorage.java rename to src/com/javaops/webapp/MainTestArrayStorage.java index b15b81e2..0c4a5f26 100644 --- a/src/MainTestArrayStorage.java +++ b/src/com/javaops/webapp/MainTestArrayStorage.java @@ -1,28 +1,33 @@ +package com.javaops.webapp; + +import com.javaops.webapp.model.Resume; +import com.javaops.webapp.storage.ArrayStorage; + /** - * Test for your ArrayStorage implementation + * Test for your com.javaops.webapp.storage.ArrayStorage implementation */ public class MainTestArrayStorage { static final ArrayStorage ARRAY_STORAGE = new ArrayStorage(); public static void main(String[] args) { Resume r1 = new Resume(); - r1.uuid = "uuid1"; + r1.setUuid("uuid1"); Resume r2 = new Resume(); - r2.uuid = "uuid2"; + r2.setUuid("uuid2"); Resume r3 = new Resume(); - r3.uuid = "uuid3"; + r3.setUuid("uuid3"); ARRAY_STORAGE.save(r1); ARRAY_STORAGE.save(r2); ARRAY_STORAGE.save(r3); - System.out.println("Get r1: " + ARRAY_STORAGE.get(r1.uuid)); + System.out.println("Get r1: " + ARRAY_STORAGE.get(r1.getUuid())); System.out.println("Size: " + ARRAY_STORAGE.size()); System.out.println("Get dummy: " + ARRAY_STORAGE.get("dummy")); printAll(); - ARRAY_STORAGE.delete(r1.uuid); + ARRAY_STORAGE.delete(r1.getUuid()); printAll(); ARRAY_STORAGE.clear(); printAll(); diff --git a/src/com/javaops/webapp/model/Resume.java b/src/com/javaops/webapp/model/Resume.java new file mode 100644 index 00000000..bde835d8 --- /dev/null +++ b/src/com/javaops/webapp/model/Resume.java @@ -0,0 +1,40 @@ +package com.javaops.webapp.model; + +import java.util.Objects; + +/** + * Initial resume class + */ +public class Resume { + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + // Unique identifier + private String uuid; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Resume resume = (Resume) o; + + return uuid.equals(resume.uuid); + } + + @Override + public int hashCode() { + return uuid.hashCode(); + } + + @Override + public String toString() { + return uuid; + } +} diff --git a/src/com/javaops/webapp/storage/ArrayStorage.java b/src/com/javaops/webapp/storage/ArrayStorage.java new file mode 100644 index 00000000..598848ea --- /dev/null +++ b/src/com/javaops/webapp/storage/ArrayStorage.java @@ -0,0 +1,83 @@ +package com.javaops.webapp.storage; + +import com.javaops.webapp.model.Resume; + +import java.util.Arrays; + +public class ArrayStorage implements Storage { + private final Resume[] storage = new Resume[10000]; + private int size = 0; + + public void clear() { + Arrays.fill(storage, 0 , size, null); + size = 0; + } + private boolean inStorage(String uuid) { + for (int i = 0; i < size; i++) { + if (storage[i].getUuid().equals(uuid)) return true; + } + return false; + } + public void save(Resume r) { + if (inStorage(r.getUuid())) { + System.out.println("Already in storage"); + } else { + if (size < storage.length) { + storage[size] = r; + size++; + } else { + System.out.println("Storage is full"); + } + } + } + + public Resume get(String uuid) { + if (!inStorage(uuid)) { + System.out.println("Not in storage"); + return null; + } + Resume result = null; + for (int i = 0; i < size; i++) { + if (storage[i].getUuid().equals(uuid)) result = storage[i]; + } + return result; + } + + public void delete(String uuid) { + if (inStorage(uuid)) { + for (int i = 0; i < size; i++) { + if (storage[i].getUuid().equals(uuid)) { + storage[i] = storage[size - 1]; + storage[size - 1] = null; + size--; + } + } + } else { + System.out.println("Not in storage"); + } + + } + + public void update(Resume resume) { + if (inStorage(resume.getUuid())) { + for (int i = 0; i < size; i++) { + if (storage[i].getUuid().equals(resume.getUuid())) { + storage[i] = resume; + } + } + } else { + System.out.println("Not in storage"); + } + } + + /** + * @return array, contains only Resumes in storage (without null) + */ + public Resume[] getAll() { + return Arrays.copyOf(storage, size); + } + + public int size() { + return size; + } +} diff --git a/src/com/javaops/webapp/storage/Storage.java b/src/com/javaops/webapp/storage/Storage.java new file mode 100644 index 00000000..2b28cfad --- /dev/null +++ b/src/com/javaops/webapp/storage/Storage.java @@ -0,0 +1,14 @@ +package com.javaops.webapp.storage; + +import com.javaops.webapp.model.Resume; + + +public interface Storage { + public void clear(); + public void save(Resume r); + public Resume get(String uuid); + public void delete(String uuid); + public void update(Resume resume); + public Resume[] getAll(); + public int size(); +}