From 87ab6ab55f2336620ae5fdbf3da18ddf3a46fa0f Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Mon, 4 Nov 2024 15:47:23 +0300 Subject: [PATCH 01/20] =?UTF-8?q?=D1=80size,=20getAll,=20save=20and=20get?= =?UTF-8?q?=20completed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ArrayStorage.java | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/ArrayStorage.java b/src/ArrayStorage.java index 7aff0388..f1827958 100644 --- a/src/ArrayStorage.java +++ b/src/ArrayStorage.java @@ -3,28 +3,57 @@ */ public class ArrayStorage { Resume[] storage = new Resume[10000]; + int size = 0; void clear() { + for (int i = 0; i < storage.length; i++){ + storage[i] = null; + if (storage[i+1] == null && i < (storage.length-1)){ + break; + } + } } void save(Resume r) { + storage[size] = r; + size++; } Resume get(String uuid) { + for (int i = 0; i <= size; i++) { + if(storage[i].uuid.equals(uuid)){ + return storage[i]; + } + } return null; } void delete(String uuid) { + for (int i = 0; i <= size; i++) { + assert storage[i] != null; + if(storage[i].uuid.equals(uuid)){ + storage[i] = null; + + + size--; + break; + } + } + System.out.println("Не найдено резюме " + uuid); } /** * @return array, contains only Resumes in storage (without null) */ Resume[] getAll() { - return new Resume[0]; + Resume[] temp = new Resume[size]; + for(int i = 0; i < size; i++){ + temp[i] = storage[i]; + } + return temp; } int size() { - return 0; + return size; } } From 51b36e4fcaf6d8cc7ec8aa6c8865b5acb83a3fef Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Mon, 4 Nov 2024 16:18:15 +0300 Subject: [PATCH 02/20] =?UTF-8?q?=D1=8B=D1=84save=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=20=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=C3=90=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ArrayStorage.java | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/ArrayStorage.java b/src/ArrayStorage.java index f1827958..b1c7ccf3 100644 --- a/src/ArrayStorage.java +++ b/src/ArrayStorage.java @@ -1,40 +1,51 @@ -/** - * Array based storage for Resumes - */ public class ArrayStorage { Resume[] storage = new Resume[10000]; int size = 0; void clear() { - for (int i = 0; i < storage.length; i++){ + for (int i = 0; i < size; i++) { storage[i] = null; - if (storage[i+1] == null && i < (storage.length-1)){ - break; - } } } void save(Resume r) { - storage[size] = r; - size++; + if (size == 0) { + storage[size] = r; + size++; + } else { + for (int i = 0; i < size; i++) { + if (r.uuid.equals(storage[i].uuid)) { + System.out.println("Данный ID уже есть в списке!"); + return; + } + } + storage[size] = r; + size++; + } } Resume get(String uuid) { for (int i = 0; i <= size; i++) { - if(storage[i].uuid.equals(uuid)){ + if (storage[i].uuid.equals(uuid)) { return storage[i]; } } + System.out.println("Не найден данный ID"); return null; } void delete(String uuid) { - for (int i = 0; i <= size; i++) { + + for (int i = 0; i < size; i++) { assert storage[i] != null; - if(storage[i].uuid.equals(uuid)){ + if (storage[i].uuid.equals(uuid)) { storage[i] = null; + Resume[] temp = new Resume[size - i]; + System.arraycopy(storage, i, temp, 0, size - i); + + size--; break; } @@ -47,9 +58,7 @@ void delete(String uuid) { */ Resume[] getAll() { Resume[] temp = new Resume[size]; - for(int i = 0; i < size; i++){ - temp[i] = storage[i]; - } + System.arraycopy(storage, 0, temp, 0, size); return temp; } From ec61d4693b68cb4eb5ab691e823471728d6e0f6a Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Mon, 4 Nov 2024 16:36:06 +0300 Subject: [PATCH 03/20] =?UTF-8?q?save=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ArrayStorage.java | 20 +++++++++++++++----- src/MainArray.java | 3 ++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/ArrayStorage.java b/src/ArrayStorage.java index b1c7ccf3..44f365cb 100644 --- a/src/ArrayStorage.java +++ b/src/ArrayStorage.java @@ -3,9 +3,15 @@ public class ArrayStorage { int size = 0; void clear() { - for (int i = 0; i < size; i++) { - storage[i] = null; + if(size == 0){ + System.out.println("Список чист!"); + } else { + for (int i = 0; i < size; i++) { + storage[i] = null; + } + System.out.println("Список чист!"); } + size = 0; } void save(Resume r) { @@ -25,7 +31,13 @@ void save(Resume r) { } Resume get(String uuid) { - for (int i = 0; i <= size; i++) { + + if (size == 0) { + System.out.println("Список пуст!"); + return null; + } + + for (int i = 0; i < size; i++) { if (storage[i].uuid.equals(uuid)) { return storage[i]; } @@ -41,11 +53,9 @@ void delete(String uuid) { if (storage[i].uuid.equals(uuid)) { storage[i] = null; - Resume[] temp = new Resume[size - i]; System.arraycopy(storage, i, temp, 0, size - i); - size--; break; } diff --git a/src/MainArray.java b/src/MainArray.java index 063364db..b44df048 100644 --- a/src/MainArray.java +++ b/src/MainArray.java @@ -13,7 +13,8 @@ public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); Resume r; while (true) { - System.out.print("Введите одну из команд - (list | size | save uuid | delete uuid | get uuid | clear | exit): "); + System.out.print("Введите одну из команд - (list | size | save uuid | delete uuid " + + "| get uuid | clear | exit): "); String[] params = reader.readLine().trim().toLowerCase().split(" "); if (params.length < 1 || params.length > 2) { System.out.println("Неверная команда."); From ab78da66c40922ab6afb03749967a00fdf727ea2 Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Mon, 4 Nov 2024 18:07:49 +0300 Subject: [PATCH 04/20] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20delete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ArrayStorage.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/ArrayStorage.java b/src/ArrayStorage.java index 44f365cb..9a874b44 100644 --- a/src/ArrayStorage.java +++ b/src/ArrayStorage.java @@ -1,9 +1,11 @@ +import java.util.Arrays; + public class ArrayStorage { Resume[] storage = new Resume[10000]; int size = 0; void clear() { - if(size == 0){ + if (size == 0) { System.out.println("Список чист!"); } else { for (int i = 0; i < size; i++) { @@ -47,17 +49,20 @@ Resume get(String uuid) { } void delete(String uuid) { + int tempPosition; for (int i = 0; i < size; i++) { assert storage[i] != null; if (storage[i].uuid.equals(uuid)) { storage[i] = null; + tempPosition = i; - Resume[] temp = new Resume[size - i]; - System.arraycopy(storage, i, temp, 0, size - i); - + Resume[] temp = new Resume[size - tempPosition - 1]; + System.arraycopy(storage, i + 1, temp, 0, size - i - 1); + System.out.println(Arrays.toString(temp)); + System.arraycopy(temp, 0, storage, i, size - 1); size--; - break; + return; } } System.out.println("Не найдено резюме " + uuid); From 2dafefa288b73d56abe9fb5aabc07d2f912d8d81 Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Mon, 4 Nov 2024 18:14:48 +0300 Subject: [PATCH 05/20] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D1=85=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B1=D0=BE=D0=BB=D0=B5=D0=B5=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B8?= =?UTF-8?q?=D0=BC=D1=8B=C3=90=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ArrayStorage.java | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/ArrayStorage.java b/src/ArrayStorage.java index 9a874b44..89cfc42c 100644 --- a/src/ArrayStorage.java +++ b/src/ArrayStorage.java @@ -16,18 +16,18 @@ void clear() { size = 0; } - void save(Resume r) { + void save(Resume resume) { if (size == 0) { - storage[size] = r; + storage[size] = resume; size++; } else { for (int i = 0; i < size; i++) { - if (r.uuid.equals(storage[i].uuid)) { + if (resume.uuid.equals(storage[i].uuid)) { System.out.println("Данный ID уже есть в списке!"); return; } } - storage[size] = r; + storage[size] = resume; size++; } } @@ -57,10 +57,10 @@ void delete(String uuid) { storage[i] = null; tempPosition = i; - Resume[] temp = new Resume[size - tempPosition - 1]; - System.arraycopy(storage, i + 1, temp, 0, size - i - 1); - System.out.println(Arrays.toString(temp)); - System.arraycopy(temp, 0, storage, i, size - 1); + Resume[] tempArray = new Resume[size - tempPosition - 1]; + System.arraycopy(storage, i + 1, tempArray, 0, size - i - 1); + System.out.println(Arrays.toString(tempArray)); + System.arraycopy(tempArray, 0, storage, i, size - 1); size--; return; } @@ -72,9 +72,9 @@ void delete(String uuid) { * @return array, contains only Resumes in storage (without null) */ Resume[] getAll() { - Resume[] temp = new Resume[size]; - System.arraycopy(storage, 0, temp, 0, size); - return temp; + Resume[] tempArray = new Resume[size]; + System.arraycopy(storage, 0, tempArray, 0, size); + return tempArray; } int size() { From 35e52056e62a8e225cb3d02050793ef6d6a3049b Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Mon, 4 Nov 2024 19:25:09 +0300 Subject: [PATCH 06/20] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20getAll,?= =?UTF-8?q?=20=D1=83=D0=BF=D1=80=D0=BE=D1=89=D0=B5=D0=BD=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=20delete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ArrayStorage.java | 44 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 30 deletions(-) diff --git a/src/ArrayStorage.java b/src/ArrayStorage.java index 89cfc42c..2a1a2f5d 100644 --- a/src/ArrayStorage.java +++ b/src/ArrayStorage.java @@ -1,41 +1,33 @@ -import java.util.Arrays; - public class ArrayStorage { Resume[] storage = new Resume[10000]; int size = 0; void clear() { if (size == 0) { - System.out.println("Список чист!"); + System.out.println("Массив чист!"); } else { for (int i = 0; i < size; i++) { storage[i] = null; } - System.out.println("Список чист!"); + System.out.println("Массив чист!"); } size = 0; } void save(Resume resume) { - if (size == 0) { - storage[size] = resume; - size++; - } else { - for (int i = 0; i < size; i++) { - if (resume.uuid.equals(storage[i].uuid)) { - System.out.println("Данный ID уже есть в списке!"); - return; - } + for (int i = 0; i < size; i++) { + if (resume.uuid.equals(storage[i].uuid)) { + System.out.println("Данный ID уже есть в массиве!"); + return; } - storage[size] = resume; - size++; } + storage[size] = resume; + size++; } Resume get(String uuid) { - if (size == 0) { - System.out.println("Список пуст!"); + System.out.println("Массив пуст!"); return null; } @@ -49,18 +41,10 @@ Resume get(String uuid) { } void delete(String uuid) { - int tempPosition; - for (int i = 0; i < size; i++) { - assert storage[i] != null; if (storage[i].uuid.equals(uuid)) { - storage[i] = null; - tempPosition = i; - - Resume[] tempArray = new Resume[size - tempPosition - 1]; - System.arraycopy(storage, i + 1, tempArray, 0, size - i - 1); - System.out.println(Arrays.toString(tempArray)); - System.arraycopy(tempArray, 0, storage, i, size - 1); + storage[i] = storage[size - 1]; + storage[size - 1] = null; size--; return; } @@ -72,9 +56,9 @@ void delete(String uuid) { * @return array, contains only Resumes in storage (without null) */ Resume[] getAll() { - Resume[] tempArray = new Resume[size]; - System.arraycopy(storage, 0, tempArray, 0, size); - return tempArray; + Resume[] allResumes = new Resume[size]; + System.arraycopy(storage, 0, allResumes, 0, size); + return allResumes; } int size() { From 2972e76c0768fe70e3e084b3c2b30e64d4254e27 Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Mon, 4 Nov 2024 23:03:29 +0300 Subject: [PATCH 07/20] final correction --- src/ArrayStorage.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/ArrayStorage.java b/src/ArrayStorage.java index 2a1a2f5d..6102d2ed 100644 --- a/src/ArrayStorage.java +++ b/src/ArrayStorage.java @@ -5,12 +5,13 @@ public class ArrayStorage { void clear() { if (size == 0) { System.out.println("Массив чист!"); - } else { - for (int i = 0; i < size; i++) { - storage[i] = null; - } - System.out.println("Массив чист!"); + return; + } + + for (int i = 0; i < size; i++) { + storage[i] = null; } + System.out.println("Массив чист!"); size = 0; } From 44fe91ff74622e2eef08377da2e363716a649b47 Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Thu, 7 Nov 2024 15:07:39 +0300 Subject: [PATCH 08/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20update,=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D1=8B=20delete,=20save,=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=A4=C3=90Arrays=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20getAll=20=D0=B8=20clear=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ArrayStorage.java | 68 -------------- src/{ => com/urise/webapp}/MainArray.java | 12 ++- .../urise/webapp}/MainTestArrayStorage.java | 12 ++- src/{ => com/urise/webapp/model}/Resume.java | 10 +- .../urise/webapp/storage/ArrayStorage.java | 94 +++++++++++++++++++ 5 files changed, 118 insertions(+), 78 deletions(-) delete mode 100644 src/ArrayStorage.java rename src/{ => com/urise/webapp}/MainArray.java (87%) rename src/{ => com/urise/webapp}/MainTestArrayStorage.java (82%) rename src/{ => com/urise/webapp/model}/Resume.java (55%) create mode 100644 src/com/urise/webapp/storage/ArrayStorage.java diff --git a/src/ArrayStorage.java b/src/ArrayStorage.java deleted file mode 100644 index 6102d2ed..00000000 --- a/src/ArrayStorage.java +++ /dev/null @@ -1,68 +0,0 @@ -public class ArrayStorage { - Resume[] storage = new Resume[10000]; - int size = 0; - - void clear() { - if (size == 0) { - System.out.println("Массив чист!"); - return; - } - - for (int i = 0; i < size; i++) { - storage[i] = null; - } - System.out.println("Массив чист!"); - size = 0; - } - - void save(Resume resume) { - for (int i = 0; i < size; i++) { - if (resume.uuid.equals(storage[i].uuid)) { - System.out.println("Данный ID уже есть в массиве!"); - return; - } - } - storage[size] = resume; - size++; - } - - Resume get(String uuid) { - if (size == 0) { - System.out.println("Массив пуст!"); - return null; - } - - for (int i = 0; i < size; i++) { - if (storage[i].uuid.equals(uuid)) { - return storage[i]; - } - } - System.out.println("Не найден данный ID"); - return null; - } - - void delete(String uuid) { - for (int i = 0; i < size; i++) { - if (storage[i].uuid.equals(uuid)) { - storage[i] = storage[size - 1]; - storage[size - 1] = null; - size--; - return; - } - } - System.out.println("Не найдено резюме " + uuid); - } - - /** - * @return array, contains only Resumes in storage (without null) - */ - Resume[] getAll() { - Resume[] allResumes = new Resume[size]; - System.arraycopy(storage, 0, allResumes, 0, size); - return allResumes; - } - - int size() { - return size; - } -} diff --git a/src/MainArray.java b/src/com/urise/webapp/MainArray.java similarity index 87% rename from src/MainArray.java rename to src/com/urise/webapp/MainArray.java index b44df048..ff729c48 100644 --- a/src/MainArray.java +++ b/src/com/urise/webapp/MainArray.java @@ -1,3 +1,8 @@ +package com.urise.webapp; + +import com.urise.webapp.model.Resume; +import com.urise.webapp.storage.ArrayStorage; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -13,7 +18,7 @@ public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); Resume r; while (true) { - System.out.print("Введите одну из команд - (list | size | save uuid | delete uuid " + + System.out.print("Введите одну из команд - (list | size | save uuid | update uuid | delete uuid " + "| get uuid | clear | exit): "); String[] params = reader.readLine().trim().toLowerCase().split(" "); if (params.length < 1 || params.length > 2) { @@ -37,6 +42,11 @@ public static void main(String[] args) throws IOException { ARRAY_STORAGE.save(r); printAll(); break; + case "update": + r = new Resume(); + r.uuid = uuid; + ARRAY_STORAGE.update(r); + break; case "delete": ARRAY_STORAGE.delete(uuid); printAll(); diff --git a/src/MainTestArrayStorage.java b/src/com/urise/webapp/MainTestArrayStorage.java similarity index 82% rename from src/MainTestArrayStorage.java rename to src/com/urise/webapp/MainTestArrayStorage.java index b15b81e2..b658f4f7 100644 --- a/src/MainTestArrayStorage.java +++ b/src/com/urise/webapp/MainTestArrayStorage.java @@ -1,6 +1,8 @@ -/** - * Test for your ArrayStorage implementation - */ +package com.urise.webapp; + +import com.urise.webapp.model.Resume; +import com.urise.webapp.storage.ArrayStorage; + public class MainTestArrayStorage { static final ArrayStorage ARRAY_STORAGE = new ArrayStorage(); @@ -11,6 +13,9 @@ public static void main(String[] args) { r2.uuid = "uuid2"; Resume r3 = new Resume(); r3.uuid = "uuid3"; + Resume r4 = new Resume(); + r4.uuid = "uuid3"; + ARRAY_STORAGE.save(r1); ARRAY_STORAGE.save(r2); @@ -24,6 +29,7 @@ public static void main(String[] args) { printAll(); ARRAY_STORAGE.delete(r1.uuid); printAll(); + ARRAY_STORAGE.update(r4); ARRAY_STORAGE.clear(); printAll(); diff --git a/src/Resume.java b/src/com/urise/webapp/model/Resume.java similarity index 55% rename from src/Resume.java rename to src/com/urise/webapp/model/Resume.java index 8de4e4b8..334284a2 100644 --- a/src/Resume.java +++ b/src/com/urise/webapp/model/Resume.java @@ -1,13 +1,11 @@ -/** - * Initial resume class - */ +package com.urise.webapp.model; + public class Resume { - // Unique identifier - String uuid; + public String uuid; @Override public String toString() { return uuid; } -} +} \ No newline at end of file diff --git a/src/com/urise/webapp/storage/ArrayStorage.java b/src/com/urise/webapp/storage/ArrayStorage.java new file mode 100644 index 00000000..810f7001 --- /dev/null +++ b/src/com/urise/webapp/storage/ArrayStorage.java @@ -0,0 +1,94 @@ +package com.urise.webapp.storage; + +import com.urise.webapp.model.Resume; + +import java.util.Arrays; + +public class ArrayStorage { + Resume[] storage = new Resume[10000]; + private int size = 0; + int foundedIndex; + + public void clear() { + if (size == 0) { + System.out.println("Массив пуст!"); + return; + } + Arrays.fill(storage, 0, size - 1, null); + size = 0; + System.out.println("Массив полностью очищен!"); + } + + public void save(Resume resume) { + if (storage.length == size) { + System.out.println("В массиве нет места для хранения!"); + return; + } + + if (isResumePresent(resume)) { + System.out.println("Данный ID:" + resume.uuid + " уже есть в массиве!"); + return; + } + + storage[size] = resume; + size++; + System.out.println("Резюме успешно сохранено! ID:" + resume.uuid); + } + + public void update(Resume resume) { + if (isResumePresent(resume)) { + storage[foundedIndex] = resume; + System.out.println("Резюме успешно обновлено ID:" + resume.uuid); + } else { + System.out.println("Такое резюме не найдено в массиве ID: " + resume.uuid); + } + } + + public Resume get(String uuid) { + if (size == 0) { + System.out.println("Массив пустой!"); + return null; + } + + for (int i = 0; i < size; i++) { + if (storage[i].uuid.equals(uuid)) { + return storage[i]; + } + } + + System.out.println("Не найден данный ID: " + uuid); + return null; + } + + public void delete(String uuid) { + Resume tempResume = new Resume(); + tempResume.uuid = uuid; + + if (isResumePresent(tempResume)) { + storage[foundedIndex] = storage[size - 1]; + storage[size - 1] = null; + size--; + System.out.println("Резюме удалено! ID:" + uuid); + return; + } + System.out.println("Не найдено резюме ID:" + uuid); + } + + public Resume[] getAll() { + return Arrays.copyOfRange(storage, 0, size); + } + + public int size() { + return size; + } + + boolean isResumePresent(Resume resume) { + for (int i = 0; i < size; i++) { + if (resume.uuid.equals(storage[i].uuid)) { + foundedIndex = i; + return true; + } + } + return false; + } +} From b6ef63f3710ceed95a8061677646627ca13734e1 Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Thu, 7 Nov 2024 20:43:13 +0300 Subject: [PATCH 09/20] =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D0=BE=D0=B5=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8=20isExisting=20=D0=B8=20getIndex,=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=20=D1=81=20=D1=83?= =?UTF-8?q?=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D0=B5=D0=BC=20=D1=81=D1=83=D1=89?= =?UTF-8?q?=D0=B5=D1=81=D1=8D=D1=82=D0=B8=D1=85=20=D0=BC=D0=B5=D1=82=C3=90?= =?UTF-8?q?=D0=BE=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../urise/webapp/storage/ArrayStorage.java | 55 +++++++++---------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/src/com/urise/webapp/storage/ArrayStorage.java b/src/com/urise/webapp/storage/ArrayStorage.java index 810f7001..dfb0210c 100644 --- a/src/com/urise/webapp/storage/ArrayStorage.java +++ b/src/com/urise/webapp/storage/ArrayStorage.java @@ -5,9 +5,9 @@ import java.util.Arrays; public class ArrayStorage { - Resume[] storage = new Resume[10000]; + private final int STORAGE_LIMIT = 10_000; + protected final Resume[] storage = new Resume[STORAGE_LIMIT]; private int size = 0; - int foundedIndex; public void clear() { if (size == 0) { @@ -19,25 +19,22 @@ public void clear() { System.out.println("Массив полностью очищен!"); } + public void save(Resume resume) { if (storage.length == size) { System.out.println("В массиве нет места для хранения!"); - return; - } - - if (isResumePresent(resume)) { + } else if (isExisting(resume.uuid)) { System.out.println("Данный ID:" + resume.uuid + " уже есть в массиве!"); - return; + } else { + storage[size] = resume; + size++; + System.out.println("Резюме успешно сохранено! ID:" + resume.uuid); } - - storage[size] = resume; - size++; - System.out.println("Резюме успешно сохранено! ID:" + resume.uuid); } public void update(Resume resume) { - if (isResumePresent(resume)) { - storage[foundedIndex] = resume; + if (isExisting(resume.uuid)) { + storage[getIndex(resume.uuid)] = resume; System.out.println("Резюме успешно обновлено ID:" + resume.uuid); } else { System.out.println("Такое резюме не найдено в массиве ID: " + resume.uuid); @@ -50,22 +47,17 @@ public Resume get(String uuid) { return null; } - for (int i = 0; i < size; i++) { - if (storage[i].uuid.equals(uuid)) { - return storage[i]; - } + if (getIndex(uuid) < 0) { + System.out.println("Не найден данный ID: " + uuid); + return null; + } else { + return storage[getIndex(uuid)]; } - - System.out.println("Не найден данный ID: " + uuid); - return null; } public void delete(String uuid) { - Resume tempResume = new Resume(); - tempResume.uuid = uuid; - - if (isResumePresent(tempResume)) { - storage[foundedIndex] = storage[size - 1]; + if (isExisting(uuid)) { + storage[getIndex(uuid)] = storage[size - 1]; storage[size - 1] = null; size--; System.out.println("Резюме удалено! ID:" + uuid); @@ -82,13 +74,16 @@ public int size() { return size; } - boolean isResumePresent(Resume resume) { + protected int getIndex(String uuid) { for (int i = 0; i < size; i++) { - if (resume.uuid.equals(storage[i].uuid)) { - foundedIndex = i; - return true; + if (uuid.equals(storage[i].uuid)) { + return i; } } - return false; + return -1; + } + + protected boolean isExisting(String uuid) { + return getIndex(uuid) >= 0; } } From ab4bc3e07e7038a5b46d0cfe2ccb73b61f879ab9 Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Thu, 7 Nov 2024 20:57:40 +0300 Subject: [PATCH 10/20] =?UTF-8?q?=D0=B0=D1=89=C3=90foundIndex=20added?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/urise/webapp/storage/ArrayStorage.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/urise/webapp/storage/ArrayStorage.java b/src/com/urise/webapp/storage/ArrayStorage.java index dfb0210c..9ad4766b 100644 --- a/src/com/urise/webapp/storage/ArrayStorage.java +++ b/src/com/urise/webapp/storage/ArrayStorage.java @@ -42,16 +42,17 @@ public void update(Resume resume) { } public Resume get(String uuid) { + int foundIndex = getIndex(uuid); if (size == 0) { System.out.println("Массив пустой!"); return null; } - if (getIndex(uuid) < 0) { + if (foundIndex < 0) { System.out.println("Не найден данный ID: " + uuid); return null; } else { - return storage[getIndex(uuid)]; + return storage[foundIndex]; } } From 20535018c1f821f0f88941815bb21de6f28009bd Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Sun, 10 Nov 2024 14:22:08 +0300 Subject: [PATCH 11/20] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20isExisting,=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=C3=90=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20save,=20update,=20delete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../urise/webapp/storage/ArrayStorage.java | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/com/urise/webapp/storage/ArrayStorage.java b/src/com/urise/webapp/storage/ArrayStorage.java index 9ad4766b..98300b03 100644 --- a/src/com/urise/webapp/storage/ArrayStorage.java +++ b/src/com/urise/webapp/storage/ArrayStorage.java @@ -21,9 +21,11 @@ public void clear() { public void save(Resume resume) { - if (storage.length == size) { + int index = getIndex(resume.uuid); + + if (STORAGE_LIMIT == size) { System.out.println("В массиве нет места для хранения!"); - } else if (isExisting(resume.uuid)) { + } else if (isExisting(index)) { System.out.println("Данный ID:" + resume.uuid + " уже есть в массиве!"); } else { storage[size] = resume; @@ -33,8 +35,10 @@ public void save(Resume resume) { } public void update(Resume resume) { - if (isExisting(resume.uuid)) { - storage[getIndex(resume.uuid)] = resume; + int index = getIndex(resume.uuid); + + if (isExisting(index)) { + storage[index] = resume; System.out.println("Резюме успешно обновлено ID:" + resume.uuid); } else { System.out.println("Такое резюме не найдено в массиве ID: " + resume.uuid); @@ -42,23 +46,21 @@ public void update(Resume resume) { } public Resume get(String uuid) { - int foundIndex = getIndex(uuid); - if (size == 0) { - System.out.println("Массив пустой!"); - return null; - } + int index = getIndex(uuid); - if (foundIndex < 0) { + if (index < 0) { System.out.println("Не найден данный ID: " + uuid); return null; } else { - return storage[foundIndex]; + return storage[index]; } } public void delete(String uuid) { - if (isExisting(uuid)) { - storage[getIndex(uuid)] = storage[size - 1]; + int index = getIndex(uuid); + + if (isExisting(index)) { + storage[index] = storage[size - 1]; storage[size - 1] = null; size--; System.out.println("Резюме удалено! ID:" + uuid); @@ -84,7 +86,7 @@ protected int getIndex(String uuid) { return -1; } - protected boolean isExisting(String uuid) { - return getIndex(uuid) >= 0; + protected boolean isExisting(int index) { + return index >= 0; } } From 8c46ad7fc2cde4d3325399df8a001095760c3c80 Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Sun, 17 Nov 2024 16:34:25 +0300 Subject: [PATCH 12/20] =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=B2=20=D1=81=D0=BE=D0=BE=D1=82=D0=B2?= =?UTF-8?q?=D0=B5=D1=82=D1=81=D1=82=D0=B2=D0=B8=D0=B8=20=D1=81=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=BC=D0=B8=D1=82=D0=B0=D0=BC=D0=B8,=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BD=D0=B0=D0=B4=20=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC=20=D0=B4=D1=83?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D1=80=D1=83=D1=8E=D1=89=D0=B5=D0=B3=D0=BE?= =?UTF-8?q?=D1=81=D1=8F=20=D0=BA=D0=BE=D0=B4=D0=B0=20=D0=B2=20ArrayStorage?= =?UTF-8?q?=20Sorted=20array?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/urise/webapp/model/Resume.java | 11 --- .../urise/webapp/storage/ArrayStorage.java | 92 ------------------- .../javawebinar/basejava}/MainArray.java | 13 +-- .../basejava}/MainTestArrayStorage.java | 32 ++++--- src/ru/javawebinar/basejava/model/Resume.java | 39 ++++++++ .../storage/AbstractArrayStorage.java | 48 ++++++++++ .../basejava/storage/ArrayStorage.java | 57 ++++++++++++ .../basejava/storage/SortedArrayStorage.java | 80 ++++++++++++++++ .../javawebinar/basejava/storage/Storage.java | 20 ++++ 9 files changed, 269 insertions(+), 123 deletions(-) delete mode 100644 src/com/urise/webapp/model/Resume.java delete mode 100644 src/com/urise/webapp/storage/ArrayStorage.java rename src/{com/urise/webapp => ru/javawebinar/basejava}/MainArray.java (88%) rename src/{com/urise/webapp => ru/javawebinar/basejava}/MainTestArrayStorage.java (51%) create mode 100644 src/ru/javawebinar/basejava/model/Resume.java create mode 100644 src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java create mode 100644 src/ru/javawebinar/basejava/storage/ArrayStorage.java create mode 100644 src/ru/javawebinar/basejava/storage/SortedArrayStorage.java create mode 100644 src/ru/javawebinar/basejava/storage/Storage.java diff --git a/src/com/urise/webapp/model/Resume.java b/src/com/urise/webapp/model/Resume.java deleted file mode 100644 index 334284a2..00000000 --- a/src/com/urise/webapp/model/Resume.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.urise.webapp.model; - -public class Resume { - - public String uuid; - - @Override - public String toString() { - return uuid; - } -} \ No newline at end of file diff --git a/src/com/urise/webapp/storage/ArrayStorage.java b/src/com/urise/webapp/storage/ArrayStorage.java deleted file mode 100644 index 98300b03..00000000 --- a/src/com/urise/webapp/storage/ArrayStorage.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.urise.webapp.storage; - -import com.urise.webapp.model.Resume; - -import java.util.Arrays; - -public class ArrayStorage { - private final int STORAGE_LIMIT = 10_000; - protected final Resume[] storage = new Resume[STORAGE_LIMIT]; - private int size = 0; - - public void clear() { - if (size == 0) { - System.out.println("Массив пуст!"); - return; - } - Arrays.fill(storage, 0, size - 1, null); - size = 0; - System.out.println("Массив полностью очищен!"); - } - - - public void save(Resume resume) { - int index = getIndex(resume.uuid); - - if (STORAGE_LIMIT == size) { - System.out.println("В массиве нет места для хранения!"); - } else if (isExisting(index)) { - System.out.println("Данный ID:" + resume.uuid + " уже есть в массиве!"); - } else { - storage[size] = resume; - size++; - System.out.println("Резюме успешно сохранено! ID:" + resume.uuid); - } - } - - public void update(Resume resume) { - int index = getIndex(resume.uuid); - - if (isExisting(index)) { - storage[index] = resume; - System.out.println("Резюме успешно обновлено ID:" + resume.uuid); - } else { - System.out.println("Такое резюме не найдено в массиве ID: " + resume.uuid); - } - } - - public Resume get(String uuid) { - int index = getIndex(uuid); - - if (index < 0) { - System.out.println("Не найден данный ID: " + uuid); - return null; - } else { - return storage[index]; - } - } - - public void delete(String uuid) { - int index = getIndex(uuid); - - if (isExisting(index)) { - storage[index] = storage[size - 1]; - storage[size - 1] = null; - size--; - System.out.println("Резюме удалено! ID:" + uuid); - return; - } - System.out.println("Не найдено резюме ID:" + uuid); - } - - public Resume[] getAll() { - return Arrays.copyOfRange(storage, 0, size); - } - - public int size() { - return size; - } - - protected int getIndex(String uuid) { - for (int i = 0; i < size; i++) { - if (uuid.equals(storage[i].uuid)) { - return i; - } - } - return -1; - } - - protected boolean isExisting(int index) { - return index >= 0; - } -} diff --git a/src/com/urise/webapp/MainArray.java b/src/ru/javawebinar/basejava/MainArray.java similarity index 88% rename from src/com/urise/webapp/MainArray.java rename to src/ru/javawebinar/basejava/MainArray.java index ff729c48..5d5d09c2 100644 --- a/src/com/urise/webapp/MainArray.java +++ b/src/ru/javawebinar/basejava/MainArray.java @@ -1,7 +1,8 @@ -package com.urise.webapp; +package ru.javawebinar.basejava; -import com.urise.webapp.model.Resume; -import com.urise.webapp.storage.ArrayStorage; +import ru.javawebinar.basejava.model.Resume; +import ru.javawebinar.basejava.storage.ArrayStorage; +import ru.javawebinar.basejava.storage.Storage; import java.io.BufferedReader; import java.io.IOException; @@ -12,7 +13,7 @@ * (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)); @@ -38,13 +39,13 @@ 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; case "update": r = new Resume(); - r.uuid = uuid; + r.setUuid(uuid); ARRAY_STORAGE.update(r); break; case "delete": diff --git a/src/com/urise/webapp/MainTestArrayStorage.java b/src/ru/javawebinar/basejava/MainTestArrayStorage.java similarity index 51% rename from src/com/urise/webapp/MainTestArrayStorage.java rename to src/ru/javawebinar/basejava/MainTestArrayStorage.java index b658f4f7..53f1f75e 100644 --- a/src/com/urise/webapp/MainTestArrayStorage.java +++ b/src/ru/javawebinar/basejava/MainTestArrayStorage.java @@ -1,33 +1,37 @@ -package com.urise.webapp; +package ru.javawebinar.basejava; -import com.urise.webapp.model.Resume; -import com.urise.webapp.storage.ArrayStorage; +import ru.javawebinar.basejava.model.Resume; +import ru.javawebinar.basejava.storage.SortedArrayStorage; +import ru.javawebinar.basejava.storage.Storage; public class MainTestArrayStorage { - static final ArrayStorage ARRAY_STORAGE = new ArrayStorage(); + static final Storage ARRAY_STORAGE = new SortedArrayStorage(); public static void main(String[] args) { - Resume r1 = new Resume(); - r1.uuid = "uuid1"; - Resume r2 = new Resume(); - r2.uuid = "uuid2"; - Resume r3 = new Resume(); - r3.uuid = "uuid3"; - Resume r4 = new Resume(); - r4.uuid = "uuid3"; + final Resume r1 = new Resume(); + r1.setUuid("uuid1"); + final Resume r2 = new Resume(); + r2.setUuid("uuid2"); + final Resume r3 = new Resume(); + r3.setUuid("uuid3"); + final Resume r4 = new Resume(); + r4.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.update(r4); ARRAY_STORAGE.clear(); diff --git a/src/ru/javawebinar/basejava/model/Resume.java b/src/ru/javawebinar/basejava/model/Resume.java new file mode 100644 index 00000000..fcb68435 --- /dev/null +++ b/src/ru/javawebinar/basejava/model/Resume.java @@ -0,0 +1,39 @@ +package ru.javawebinar.basejava.model; + +public class Resume implements Comparable{ + + private String uuid; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = 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; + } + + @Override + public int compareTo(Resume o) { + return uuid.compareTo(o.uuid); + } +} \ No newline at end of file diff --git a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java new file mode 100644 index 00000000..542b386d --- /dev/null +++ b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java @@ -0,0 +1,48 @@ +package ru.javawebinar.basejava.storage; + +import ru.javawebinar.basejava.model.Resume; + +import java.util.Arrays; + +public abstract class AbstractArrayStorage implements Storage { + protected static final int STORAGE_LIMIT = 10000; + protected Resume[] storage = new Resume[STORAGE_LIMIT]; + protected int size = 0; + + @Override + public int size() { + return size; + } + + @Override + public Resume[] getAll() { + return Arrays.copyOfRange(storage, 0, size); + } + + @Override + public void clear() { + if (size == 0) { + System.out.println("Массив пуст!"); + return; + } + Arrays.fill(storage, 0, size - 1, null); + size = 0; + System.out.println("Массив полностью очищен!"); + } + + @Override + public Resume get(String uuid) { + int index = getIndex(uuid); + if (index < 0) { + System.out.println("Не найден данный ID: " + uuid); + return null; + } + return storage[index]; + } + + protected boolean isExisting(int index) { + return index >= 0; + } + + protected abstract int getIndex(String uuid); +} \ No newline at end of file diff --git a/src/ru/javawebinar/basejava/storage/ArrayStorage.java b/src/ru/javawebinar/basejava/storage/ArrayStorage.java new file mode 100644 index 00000000..cc86ecea --- /dev/null +++ b/src/ru/javawebinar/basejava/storage/ArrayStorage.java @@ -0,0 +1,57 @@ +package ru.javawebinar.basejava.storage; + +import ru.javawebinar.basejava.model.Resume; + +public class ArrayStorage extends AbstractArrayStorage { + + @Override + public void save(Resume resume) { + int index = getIndex(resume.getUuid()); + + if (STORAGE_LIMIT <= size) { + System.out.println("Storage overflow!"); + } else if (isExisting(index)) { + System.out.println("Данный ID:" + resume.getUuid() + " уже существует!"); + } else { + storage[size] = resume; + size++; + System.out.println("Резюме успешно сохранено! ID:" + resume.getUuid()); + } + } + + @Override + public void update(Resume resume) { + int index = getIndex(resume.getUuid()); + + if (isExisting(index)) { + storage[index] = resume; + System.out.println("Резюме успешно обновлено ID:" + resume.getUuid()); + } else { + System.out.println("Такое резюме не найдено в массиве ID: " + resume.getUuid()); + } + } + + @Override + public void delete(String uuid) { + int index = getIndex(uuid); + + if (isExisting(index)) { + storage[index] = storage[size - 1]; + storage[size - 1] = null; + size--; + System.out.println("Резюме удалено! ID:" + uuid); + return; + } + System.out.println("Не найдено резюме ID:" + uuid); + } + + @Override + protected int getIndex(String uuid) { + for (int i = 0; i < size; i++) { + if (uuid.equals(storage[i].getUuid())) { + return i; + } + } + return -1; + } +} diff --git a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java new file mode 100644 index 00000000..c25d3a2b --- /dev/null +++ b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java @@ -0,0 +1,80 @@ +package ru.javawebinar.basejava.storage; + +import ru.javawebinar.basejava.model.Resume; + +import java.util.Arrays; + +public class SortedArrayStorage extends AbstractArrayStorage { + + @Override + public void update(Resume resume) { + int index = getIndex(resume.getUuid()); + + if (isExisting(index)) { + storage[index] = resume; + System.out.println("Резюме успешно обновлено ID:" + resume.getUuid()); + } else { + System.out.println("Такое резюме не найдено в массиве ID: " + resume.getUuid()); + } + } + + @Override + public void save(Resume resume) { + int index = getIndex(resume.getUuid()); + + if (STORAGE_LIMIT <= size) { + System.out.println("Storage overflow!"); + } else if (isExisting(index)){ + System.out.println("Данный ID:" + resume.getUuid() + " уже существует!"); + } else if (size == 0){ + storage[0] = resume; + System.out.println("Резюме успешно сохранено в первую ячейку! ID:" + resume.getUuid()); + return; + } + + while (true) { + int lowerBound = 0; + int upperBound = size - 1; + int currentIndex = 0; + while (true) { + currentIndex = (upperBound + lowerBound) / 2; + if (storage[currentIndex].compareTo(resume) < 0) { + lowerBound = currentIndex + 1; // its in the upper + if (lowerBound > upperBound) + currentIndex += 1; + storage[currentIndex] = resume; + + } else { + upperBound = currentIndex - 1; // its in the lower + if (lowerBound > upperBound) + storage[currentIndex] = resume; + size++; + return; + } + } + } + } + + @Override + public void delete(String uuid) { + int index = getIndex(uuid); + if(index < 0 ) { + System.out.println("Не найдено резюме ID:" + uuid); + return; + } else { + Resume[] tempArray = new Resume[size - index - 1]; + System.arraycopy(storage, index + 1, tempArray, 0, size - index - 1); + System.out.println(Arrays.toString(tempArray)); + System.arraycopy(tempArray, 0, storage, index, size - 1); + size--; + System.out.println("Резюме удалено из сортированного массива! ID:" + uuid); + } + } + + @Override + protected int getIndex(String uuid) { + Resume searchKey = new Resume(); + searchKey.setUuid(uuid); + return Arrays.binarySearch(storage, 0, size, searchKey); + } +} \ No newline at end of file diff --git a/src/ru/javawebinar/basejava/storage/Storage.java b/src/ru/javawebinar/basejava/storage/Storage.java new file mode 100644 index 00000000..2f7a1d9e --- /dev/null +++ b/src/ru/javawebinar/basejava/storage/Storage.java @@ -0,0 +1,20 @@ +package ru.javawebinar.basejava.storage; + +import ru.javawebinar.basejava.model.Resume; + +public interface Storage { + + void clear(); + + void update(Resume r); + + void save(Resume r); + + Resume get(String uuid); + + void delete(String uuid); + + Resume[] getAll(); + + int size(); +} \ No newline at end of file From 242c0664fe39d9b08d70ea561d0aa464debd957f Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Sun, 17 Nov 2024 18:52:35 +0300 Subject: [PATCH 13/20] =?UTF-8?q?=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=20=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=20=D0=B1=D0=B8=D0=BD=D0=B0?= =?UTF-8?q?=D1=80=D0=BD=D1=8B=D0=BC=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=20=D1=87=D0=B5=D1=80=D0=BD=D0=BE=D0=B2=D0=BE=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basejava/MainTestArrayStorage.java | 7 +++ .../storage/AbstractArrayStorage.java | 23 +++++++- .../basejava/storage/ArrayStorage.java | 36 +++++-------- .../basejava/storage/SortedArrayStorage.java | 53 +++---------------- 4 files changed, 47 insertions(+), 72 deletions(-) diff --git a/src/ru/javawebinar/basejava/MainTestArrayStorage.java b/src/ru/javawebinar/basejava/MainTestArrayStorage.java index 53f1f75e..cb078cca 100644 --- a/src/ru/javawebinar/basejava/MainTestArrayStorage.java +++ b/src/ru/javawebinar/basejava/MainTestArrayStorage.java @@ -12,10 +12,15 @@ public static void main(String[] args) { r1.setUuid("uuid1"); final Resume r2 = new Resume(); r2.setUuid("uuid2"); + final Resume r6 = new Resume(); + r6.setUuid("uuid6"); final Resume r3 = new Resume(); r3.setUuid("uuid3"); final Resume r4 = new Resume(); r4.setUuid("uuid3"); + final Resume r5 = new Resume(); + r5.setUuid("uuid5"); + @@ -23,6 +28,8 @@ public static void main(String[] args) { ARRAY_STORAGE.save(r1); ARRAY_STORAGE.save(r2); ARRAY_STORAGE.save(r3); + ARRAY_STORAGE.save(r6); + ARRAY_STORAGE.save(r5); System.out.println("Get r1: " + ARRAY_STORAGE.get(r1.getUuid())); diff --git a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java index 542b386d..e061f0cd 100644 --- a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java @@ -19,6 +19,18 @@ public Resume[] getAll() { return Arrays.copyOfRange(storage, 0, size); } + @Override + public void update(Resume resume) { + int index = getIndex(resume.getUuid()); + + if (index >= 0) { + storage[index] = resume; + System.out.println("Резюме успешно обновлено ID:" + resume.getUuid()); + } else { + System.out.println("Такое резюме не найдено в массиве ID: " + resume.getUuid()); + } + } + @Override public void clear() { if (size == 0) { @@ -40,8 +52,15 @@ public Resume get(String uuid) { return storage[index]; } - protected boolean isExisting(int index) { - return index >= 0; + protected boolean overflowOrExist(Resume resume, int index) { + if (STORAGE_LIMIT <= size) { + System.out.println("Storage overflow!"); + return true; + } else if (index >= 0) { + System.out.println("Данный ID:" + resume.getUuid() + " уже существует!"); + return true; + } + return false; } protected abstract int getIndex(String uuid); diff --git a/src/ru/javawebinar/basejava/storage/ArrayStorage.java b/src/ru/javawebinar/basejava/storage/ArrayStorage.java index cc86ecea..cfc71e5f 100644 --- a/src/ru/javawebinar/basejava/storage/ArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/ArrayStorage.java @@ -8,41 +8,29 @@ public class ArrayStorage extends AbstractArrayStorage { public void save(Resume resume) { int index = getIndex(resume.getUuid()); - if (STORAGE_LIMIT <= size) { - System.out.println("Storage overflow!"); - } else if (isExisting(index)) { - System.out.println("Данный ID:" + resume.getUuid() + " уже существует!"); - } else { - storage[size] = resume; - size++; - System.out.println("Резюме успешно сохранено! ID:" + resume.getUuid()); + if (overflowOrExist(resume, index)) { + return; } - } - @Override - public void update(Resume resume) { - int index = getIndex(resume.getUuid()); + storage[size] = resume; + size++; + System.out.println("Резюме успешно сохранено! ID:" + resume.getUuid()); - if (isExisting(index)) { - storage[index] = resume; - System.out.println("Резюме успешно обновлено ID:" + resume.getUuid()); - } else { - System.out.println("Такое резюме не найдено в массиве ID: " + resume.getUuid()); - } } @Override public void delete(String uuid) { int index = getIndex(uuid); - if (isExisting(index)) { - storage[index] = storage[size - 1]; - storage[size - 1] = null; - size--; - System.out.println("Резюме удалено! ID:" + uuid); + if (index < 0) { + System.out.println("Не найдено резюме ID:" + uuid); return; } - System.out.println("Не найдено резюме ID:" + uuid); + + storage[index] = storage[size - 1]; + storage[size - 1] = null; + size--; + System.out.println("Резюме удалено! ID:" + uuid); } @Override diff --git a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java index c25d3a2b..609f0895 100644 --- a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java @@ -6,66 +6,27 @@ public class SortedArrayStorage extends AbstractArrayStorage { - @Override - public void update(Resume resume) { - int index = getIndex(resume.getUuid()); - - if (isExisting(index)) { - storage[index] = resume; - System.out.println("Резюме успешно обновлено ID:" + resume.getUuid()); - } else { - System.out.println("Такое резюме не найдено в массиве ID: " + resume.getUuid()); - } - } - @Override public void save(Resume resume) { int index = getIndex(resume.getUuid()); - if (STORAGE_LIMIT <= size) { - System.out.println("Storage overflow!"); - } else if (isExisting(index)){ - System.out.println("Данный ID:" + resume.getUuid() + " уже существует!"); - } else if (size == 0){ - storage[0] = resume; - System.out.println("Резюме успешно сохранено в первую ячейку! ID:" + resume.getUuid()); + if (overflowOrExist(resume, index)) { return; } - while (true) { - int lowerBound = 0; - int upperBound = size - 1; - int currentIndex = 0; - while (true) { - currentIndex = (upperBound + lowerBound) / 2; - if (storage[currentIndex].compareTo(resume) < 0) { - lowerBound = currentIndex + 1; // its in the upper - if (lowerBound > upperBound) - currentIndex += 1; - storage[currentIndex] = resume; - - } else { - upperBound = currentIndex - 1; // its in the lower - if (lowerBound > upperBound) - storage[currentIndex] = resume; - size++; - return; - } - } - } + System.arraycopy(storage, -index - 1, storage, -index, size - index); + storage[-index - 1] = resume; + System.out.println("Резюме успешно добавлено в массив! ID:" + resume.getUuid()); + size++; } @Override public void delete(String uuid) { int index = getIndex(uuid); - if(index < 0 ) { + if (index < 0) { System.out.println("Не найдено резюме ID:" + uuid); - return; } else { - Resume[] tempArray = new Resume[size - index - 1]; - System.arraycopy(storage, index + 1, tempArray, 0, size - index - 1); - System.out.println(Arrays.toString(tempArray)); - System.arraycopy(tempArray, 0, storage, index, size - 1); + System.arraycopy(storage, index + 1, storage, index, size - index - 1); size--; System.out.println("Резюме удалено из сортированного массива! ID:" + uuid); } From a3fcbe338fb8d2a2556b9e9c96531e50d2e14932 Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Sun, 17 Nov 2024 19:08:03 +0300 Subject: [PATCH 14/20] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=20binarySearch=C3=90,=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/javawebinar/basejava/MainTestArrayStorage.java | 5 ----- src/ru/javawebinar/basejava/storage/ArrayStorage.java | 1 - 2 files changed, 6 deletions(-) diff --git a/src/ru/javawebinar/basejava/MainTestArrayStorage.java b/src/ru/javawebinar/basejava/MainTestArrayStorage.java index cb078cca..7b703db9 100644 --- a/src/ru/javawebinar/basejava/MainTestArrayStorage.java +++ b/src/ru/javawebinar/basejava/MainTestArrayStorage.java @@ -21,17 +21,12 @@ public static void main(String[] args) { final Resume r5 = new Resume(); r5.setUuid("uuid5"); - - - - ARRAY_STORAGE.save(r1); ARRAY_STORAGE.save(r2); ARRAY_STORAGE.save(r3); ARRAY_STORAGE.save(r6); ARRAY_STORAGE.save(r5); - System.out.println("Get r1: " + ARRAY_STORAGE.get(r1.getUuid())); System.out.println("Size: " + ARRAY_STORAGE.size()); diff --git a/src/ru/javawebinar/basejava/storage/ArrayStorage.java b/src/ru/javawebinar/basejava/storage/ArrayStorage.java index cfc71e5f..16b4bd21 100644 --- a/src/ru/javawebinar/basejava/storage/ArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/ArrayStorage.java @@ -15,7 +15,6 @@ public void save(Resume resume) { storage[size] = resume; size++; System.out.println("Резюме успешно сохранено! ID:" + resume.getUuid()); - } @Override From 6e028960d4e95035447af64aa0449c56aa060a31 Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Tue, 19 Nov 2024 00:00:02 +0300 Subject: [PATCH 15/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20putResume,=20?= =?UTF-8?q?=D0=B2=20=D0=A4=D0=B8=20AbstractArray=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20save()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage/AbstractArrayStorage.java | 20 +++++++++---------- .../basejava/storage/ArrayStorage.java | 7 +++++-- .../basejava/storage/SortedArrayStorage.java | 8 ++++++-- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java index e061f0cd..70ec6ddb 100644 --- a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java @@ -5,21 +5,26 @@ import java.util.Arrays; public abstract class AbstractArrayStorage implements Storage { - protected static final int STORAGE_LIMIT = 10000; + protected static final int STORAGE_LIMIT = 10_000; protected Resume[] storage = new Resume[STORAGE_LIMIT]; protected int size = 0; - @Override public int size() { return size; } - @Override public Resume[] getAll() { return Arrays.copyOfRange(storage, 0, size); } - @Override + public void save(Resume resume) { + int index = getIndex(resume.getUuid()); + + if(!overflowOrExist(resume, index)){ + putResume(resume, index); + } + } + public void update(Resume resume) { int index = getIndex(resume.getUuid()); @@ -31,18 +36,12 @@ public void update(Resume resume) { } } - @Override public void clear() { - if (size == 0) { - System.out.println("Массив пуст!"); - return; - } Arrays.fill(storage, 0, size - 1, null); size = 0; System.out.println("Массив полностью очищен!"); } - @Override public Resume get(String uuid) { int index = getIndex(uuid); if (index < 0) { @@ -64,4 +63,5 @@ protected boolean overflowOrExist(Resume resume, int index) { } protected abstract int getIndex(String uuid); + protected abstract void putResume(Resume resume, int index); } \ No newline at end of file diff --git a/src/ru/javawebinar/basejava/storage/ArrayStorage.java b/src/ru/javawebinar/basejava/storage/ArrayStorage.java index 16b4bd21..0d8574b6 100644 --- a/src/ru/javawebinar/basejava/storage/ArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/ArrayStorage.java @@ -8,10 +8,13 @@ public class ArrayStorage extends AbstractArrayStorage { public void save(Resume resume) { int index = getIndex(resume.getUuid()); - if (overflowOrExist(resume, index)) { - return; + if (!overflowOrExist(resume, index)) { + putResume(resume, index); } + } + @Override + protected void putResume(Resume resume, int index){ storage[size] = resume; size++; System.out.println("Резюме успешно сохранено! ID:" + resume.getUuid()); diff --git a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java index 609f0895..53cc2d56 100644 --- a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java @@ -10,10 +10,13 @@ public class SortedArrayStorage extends AbstractArrayStorage { public void save(Resume resume) { int index = getIndex(resume.getUuid()); - if (overflowOrExist(resume, index)) { - return; + if (!overflowOrExist(resume, index)) { + putResume(resume, index); } + } + @Override + protected void putResume(Resume resume, int index) { System.arraycopy(storage, -index - 1, storage, -index, size - index); storage[-index - 1] = resume; System.out.println("Резюме успешно добавлено в массив! ID:" + resume.getUuid()); @@ -23,6 +26,7 @@ public void save(Resume resume) { @Override public void delete(String uuid) { int index = getIndex(uuid); + if (index < 0) { System.out.println("Не найдено резюме ID:" + uuid); } else { From 489805f1e57f2f5cf52a2bfd87db547438a4c6db Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Tue, 19 Nov 2024 00:37:44 +0300 Subject: [PATCH 16/20] =?UTF-8?q?=D1=8B=D1=84save=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=20=D0=BF=D0=BE=D0=BB=D0=BD=D0=BE=D1=81=D1=82=D1=8C?= =?UTF-8?q?=D1=8E=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81=D0=B5=D0=BD?= =?UTF-8?q?=20=D0=B2=20AbstractArray?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basejava/storage/AbstractArrayStorage.java | 2 +- src/ru/javawebinar/basejava/storage/ArrayStorage.java | 9 --------- .../javawebinar/basejava/storage/SortedArrayStorage.java | 9 --------- 3 files changed, 1 insertion(+), 19 deletions(-) diff --git a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java index 70ec6ddb..fcdb7503 100644 --- a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java @@ -17,7 +17,7 @@ public Resume[] getAll() { return Arrays.copyOfRange(storage, 0, size); } - public void save(Resume resume) { + public final void save(Resume resume) { int index = getIndex(resume.getUuid()); if(!overflowOrExist(resume, index)){ diff --git a/src/ru/javawebinar/basejava/storage/ArrayStorage.java b/src/ru/javawebinar/basejava/storage/ArrayStorage.java index 0d8574b6..14b4ef87 100644 --- a/src/ru/javawebinar/basejava/storage/ArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/ArrayStorage.java @@ -4,15 +4,6 @@ public class ArrayStorage extends AbstractArrayStorage { - @Override - public void save(Resume resume) { - int index = getIndex(resume.getUuid()); - - if (!overflowOrExist(resume, index)) { - putResume(resume, index); - } - } - @Override protected void putResume(Resume resume, int index){ storage[size] = resume; diff --git a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java index 53cc2d56..da3fd7e8 100644 --- a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java @@ -6,15 +6,6 @@ public class SortedArrayStorage extends AbstractArrayStorage { - @Override - public void save(Resume resume) { - int index = getIndex(resume.getUuid()); - - if (!overflowOrExist(resume, index)) { - putResume(resume, index); - } - } - @Override protected void putResume(Resume resume, int index) { System.arraycopy(storage, -index - 1, storage, -index, size - index); From d8f66a1f4ec81c77e7486f77b6db8d597f183982 Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Tue, 19 Nov 2024 00:58:01 +0300 Subject: [PATCH 17/20] =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=C3=90=20de?= =?UTF-8?q?lete=20=D0=BF=D0=B5=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B2=20=D0=B0=D0=B1=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=20=D0=B8=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=20=D1=88=D0=B0?= =?UTF-8?q?=D0=B1=D0=BB=D0=BE=D0=BD=D0=BE=D0=BC,=20=D1=80=D0=B5=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=B0=D0=B1=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D0=BA=D1=82=D0=BD=D1=8B=D0=B9=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=20shrinkArray()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage/AbstractArrayStorage.java | 30 +++++++++++------ .../basejava/storage/ArrayStorage.java | 32 +++++++------------ .../basejava/storage/SortedArrayStorage.java | 27 ++++++---------- 3 files changed, 43 insertions(+), 46 deletions(-) diff --git a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java index fcdb7503..af9240e1 100644 --- a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java @@ -20,12 +20,12 @@ public Resume[] getAll() { public final void save(Resume resume) { int index = getIndex(resume.getUuid()); - if(!overflowOrExist(resume, index)){ + if (!overflowOrExist(resume, index)) { putResume(resume, index); } } - public void update(Resume resume) { + public final void update(Resume resume) { int index = getIndex(resume.getUuid()); if (index >= 0) { @@ -36,13 +36,7 @@ public void update(Resume resume) { } } - public void clear() { - Arrays.fill(storage, 0, size - 1, null); - size = 0; - System.out.println("Массив полностью очищен!"); - } - - public Resume get(String uuid) { + public final Resume get(String uuid) { int index = getIndex(uuid); if (index < 0) { System.out.println("Не найден данный ID: " + uuid); @@ -51,6 +45,23 @@ public Resume get(String uuid) { return storage[index]; } + public final void delete(String uuid) { + int index = getIndex(uuid); + + if (index < 0) { + System.out.println("Не найдено резюме ID:" + uuid); + return; + } + shrinkArray(index); + System.out.println("Резюме удалено! ID:" + uuid); + } + + public void clear() { + Arrays.fill(storage, 0, size - 1, null); + size = 0; + System.out.println("Массив полностью очищен!"); + } + protected boolean overflowOrExist(Resume resume, int index) { if (STORAGE_LIMIT <= size) { System.out.println("Storage overflow!"); @@ -64,4 +75,5 @@ protected boolean overflowOrExist(Resume resume, int index) { protected abstract int getIndex(String uuid); protected abstract void putResume(Resume resume, int index); + protected abstract void shrinkArray(int index); } \ No newline at end of file diff --git a/src/ru/javawebinar/basejava/storage/ArrayStorage.java b/src/ru/javawebinar/basejava/storage/ArrayStorage.java index 14b4ef87..0fe30a28 100644 --- a/src/ru/javawebinar/basejava/storage/ArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/ArrayStorage.java @@ -5,34 +5,26 @@ public class ArrayStorage extends AbstractArrayStorage { @Override - protected void putResume(Resume resume, int index){ + protected int getIndex(String uuid) { + for (int i = 0; i < size; i++) { + if (uuid.equals(storage[i].getUuid())) { + return i; + } + } + return -1; + } + + @Override + protected void putResume(Resume resume, int index) { storage[size] = resume; size++; System.out.println("Резюме успешно сохранено! ID:" + resume.getUuid()); } @Override - public void delete(String uuid) { - int index = getIndex(uuid); - - if (index < 0) { - System.out.println("Не найдено резюме ID:" + uuid); - return; - } - + protected void shrinkArray(int index){ storage[index] = storage[size - 1]; storage[size - 1] = null; size--; - System.out.println("Резюме удалено! ID:" + uuid); - } - - @Override - protected int getIndex(String uuid) { - for (int i = 0; i < size; i++) { - if (uuid.equals(storage[i].getUuid())) { - return i; - } - } - return -1; } } diff --git a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java index da3fd7e8..8dd25db7 100644 --- a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java @@ -6,6 +6,13 @@ public class SortedArrayStorage extends AbstractArrayStorage { + @Override + protected int getIndex(String uuid) { + Resume searchKey = new Resume(); + searchKey.setUuid(uuid); + return Arrays.binarySearch(storage, 0, size, searchKey); + } + @Override protected void putResume(Resume resume, int index) { System.arraycopy(storage, -index - 1, storage, -index, size - index); @@ -15,22 +22,8 @@ protected void putResume(Resume resume, int index) { } @Override - public void delete(String uuid) { - int index = getIndex(uuid); - - if (index < 0) { - System.out.println("Не найдено резюме ID:" + uuid); - } else { - System.arraycopy(storage, index + 1, storage, index, size - index - 1); - size--; - System.out.println("Резюме удалено из сортированного массива! ID:" + uuid); - } - } - - @Override - protected int getIndex(String uuid) { - Resume searchKey = new Resume(); - searchKey.setUuid(uuid); - return Arrays.binarySearch(storage, 0, size, searchKey); + protected void shrinkArray(int index){ + System.arraycopy(storage, index + 1, storage, index, size - index - 1); + size--; } } \ No newline at end of file From 9666c98fe1213e7643fc11346e98e67bcd017787 Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Tue, 19 Nov 2024 01:03:24 +0300 Subject: [PATCH 18/20] =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D1=89?= =?UTF-8?q?=20overflowOrExisting=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=20?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81=D0=B5=D0=BD?= =?UTF-8?q?=20=C3=91=D0=B2=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20save?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage/AbstractArrayStorage.java | 22 ++++++++----------- .../basejava/storage/ArrayStorage.java | 2 +- .../basejava/storage/SortedArrayStorage.java | 2 +- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java index af9240e1..3bfcb623 100644 --- a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java @@ -20,9 +20,14 @@ public Resume[] getAll() { public final void save(Resume resume) { int index = getIndex(resume.getUuid()); - if (!overflowOrExist(resume, index)) { - putResume(resume, index); + if (STORAGE_LIMIT <= size) { + System.out.println("Storage overflow!"); + return; + } else if (index >= 0) { + System.out.println("Данный ID:" + resume.getUuid() + " уже существует!"); + return; } + putResume(resume, index); } public final void update(Resume resume) { @@ -62,18 +67,9 @@ public void clear() { System.out.println("Массив полностью очищен!"); } - protected boolean overflowOrExist(Resume resume, int index) { - if (STORAGE_LIMIT <= size) { - System.out.println("Storage overflow!"); - return true; - } else if (index >= 0) { - System.out.println("Данный ID:" + resume.getUuid() + " уже существует!"); - return true; - } - return false; - } - protected abstract int getIndex(String uuid); + protected abstract void putResume(Resume resume, int index); + protected abstract void shrinkArray(int index); } \ No newline at end of file diff --git a/src/ru/javawebinar/basejava/storage/ArrayStorage.java b/src/ru/javawebinar/basejava/storage/ArrayStorage.java index 0fe30a28..3a6dec31 100644 --- a/src/ru/javawebinar/basejava/storage/ArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/ArrayStorage.java @@ -22,7 +22,7 @@ protected void putResume(Resume resume, int index) { } @Override - protected void shrinkArray(int index){ + protected void shrinkArray(int index) { storage[index] = storage[size - 1]; storage[size - 1] = null; size--; diff --git a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java index 8dd25db7..f7235163 100644 --- a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java @@ -22,7 +22,7 @@ protected void putResume(Resume resume, int index) { } @Override - protected void shrinkArray(int index){ + protected void shrinkArray(int index) { System.arraycopy(storage, index + 1, storage, index, size - index - 1); size--; } From fbd6d548f6e4bb08cf013099adeeba9dda3078ab Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Tue, 19 Nov 2024 20:59:39 +0300 Subject: [PATCH 19/20] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D1=81=D0=B5=D0=BD=D1=8B=20=D0=BF=D0=BE=D0=BB=D0=B5=20=D0=BE?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=8B=D1=87=D0=B8=D1=82=D0=B0=D0=BD=D0=B8=D1=8F=20size=20?= =?UTF-8?q?=D0=B2=20=D0=B0=D0=B1=D1=81=D1=82=D1=80=D0=B0=D0=BA=D1=82=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java | 2 ++ src/ru/javawebinar/basejava/storage/ArrayStorage.java | 2 -- src/ru/javawebinar/basejava/storage/SortedArrayStorage.java | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java index 3bfcb623..9299e9ce 100644 --- a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java @@ -27,6 +27,7 @@ public final void save(Resume resume) { System.out.println("Данный ID:" + resume.getUuid() + " уже существует!"); return; } + size++; putResume(resume, index); } @@ -58,6 +59,7 @@ public final void delete(String uuid) { return; } shrinkArray(index); + size--; System.out.println("Резюме удалено! ID:" + uuid); } diff --git a/src/ru/javawebinar/basejava/storage/ArrayStorage.java b/src/ru/javawebinar/basejava/storage/ArrayStorage.java index 3a6dec31..57e8128a 100644 --- a/src/ru/javawebinar/basejava/storage/ArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/ArrayStorage.java @@ -17,7 +17,6 @@ protected int getIndex(String uuid) { @Override protected void putResume(Resume resume, int index) { storage[size] = resume; - size++; System.out.println("Резюме успешно сохранено! ID:" + resume.getUuid()); } @@ -25,6 +24,5 @@ protected void putResume(Resume resume, int index) { protected void shrinkArray(int index) { storage[index] = storage[size - 1]; storage[size - 1] = null; - size--; } } diff --git a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java index f7235163..8cb5ff49 100644 --- a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java @@ -18,12 +18,10 @@ protected void putResume(Resume resume, int index) { System.arraycopy(storage, -index - 1, storage, -index, size - index); storage[-index - 1] = resume; System.out.println("Резюме успешно добавлено в массив! ID:" + resume.getUuid()); - size++; } @Override protected void shrinkArray(int index) { System.arraycopy(storage, index + 1, storage, index, size - index - 1); - size--; } } \ No newline at end of file From 8a745df6ff705e72c3f034e8431438ef624b4abd Mon Sep 17 00:00:00 2001 From: Kurilenko Aleksandr Date: Fri, 6 Dec 2024 20:34:32 +0300 Subject: [PATCH 20/20] added default reflection class, added AbstractArrayStorTest --- src/ru/javawebinar/basejava/MainArray.java | 14 ++-- .../javawebinar/basejava/MainReflection.java | 20 +++++ .../basejava/MainTestArrayStorage.java | 18 ++--- .../exception/ExistStorageException.java | 7 ++ .../exception/NotExistStorageException.java | 7 ++ .../basejava/exception/StorageException.java | 14 ++++ src/ru/javawebinar/basejava/model/Resume.java | 14 +++- .../storage/AbstractArrayStorage.java | 27 ++++--- .../basejava/storage/ArrayStorage.java | 2 +- .../basejava/storage/SortedArrayStorage.java | 3 +- .../storage/AbstractArrayStorageTest.java | 76 +++++++++++++++++++ .../basejava/storage/ArrayStorageTest.java | 20 +++++ 12 files changed, 183 insertions(+), 39 deletions(-) create mode 100644 src/ru/javawebinar/basejava/MainReflection.java create mode 100644 src/ru/javawebinar/basejava/exception/ExistStorageException.java create mode 100644 src/ru/javawebinar/basejava/exception/NotExistStorageException.java create mode 100644 src/ru/javawebinar/basejava/exception/StorageException.java create mode 100644 test/ru/javawebinar/basejava/storage/AbstractArrayStorageTest.java create mode 100644 test/ru/javawebinar/basejava/storage/ArrayStorageTest.java diff --git a/src/ru/javawebinar/basejava/MainArray.java b/src/ru/javawebinar/basejava/MainArray.java index 5d5d09c2..d13b9b9d 100644 --- a/src/ru/javawebinar/basejava/MainArray.java +++ b/src/ru/javawebinar/basejava/MainArray.java @@ -13,11 +13,11 @@ * (just run, no need to understand) */ public class MainArray { - private final static Storage ARRAY_STORAGE = new ArrayStorage(); + private static final Storage ARRAY_STORAGE = new ArrayStorage(); public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); - Resume r; + Resume resume; while (true) { System.out.print("Введите одну из команд - (list | size | save uuid | update uuid | delete uuid " + "| get uuid | clear | exit): "); @@ -38,15 +38,13 @@ public static void main(String[] args) throws IOException { System.out.println(ARRAY_STORAGE.size()); break; case "save": - r = new Resume(); - r.setUuid(uuid); - ARRAY_STORAGE.save(r); + resume = new Resume(uuid); + ARRAY_STORAGE.save(resume); printAll(); break; case "update": - r = new Resume(); - r.setUuid(uuid); - ARRAY_STORAGE.update(r); + resume = new Resume(uuid); + ARRAY_STORAGE.update(resume); break; case "delete": ARRAY_STORAGE.delete(uuid); diff --git a/src/ru/javawebinar/basejava/MainReflection.java b/src/ru/javawebinar/basejava/MainReflection.java new file mode 100644 index 00000000..4be1cc91 --- /dev/null +++ b/src/ru/javawebinar/basejava/MainReflection.java @@ -0,0 +1,20 @@ +package ru.javawebinar.basejava; + +import ru.javawebinar.basejava.model.Resume; + +import java.lang.reflect.Field; + +public class MainReflection { + + public static void main(String[] args) throws IllegalAccessException { + Resume r = new Resume(); + Field field = r.getClass().getDeclaredFields()[0]; + field.setAccessible(true); + System.out.println(field.getName()); + System.out.println(field.get(r)); + field.set(r, "new_uuid"); + //System.out.println(field(r)); + // TODO : invoke r.toString via reflection + System.out.println(r); + } +} \ No newline at end of file diff --git a/src/ru/javawebinar/basejava/MainTestArrayStorage.java b/src/ru/javawebinar/basejava/MainTestArrayStorage.java index 7b703db9..e305bd14 100644 --- a/src/ru/javawebinar/basejava/MainTestArrayStorage.java +++ b/src/ru/javawebinar/basejava/MainTestArrayStorage.java @@ -8,18 +8,12 @@ public class MainTestArrayStorage { static final Storage ARRAY_STORAGE = new SortedArrayStorage(); public static void main(String[] args) { - final Resume r1 = new Resume(); - r1.setUuid("uuid1"); - final Resume r2 = new Resume(); - r2.setUuid("uuid2"); - final Resume r6 = new Resume(); - r6.setUuid("uuid6"); - final Resume r3 = new Resume(); - r3.setUuid("uuid3"); - final Resume r4 = new Resume(); - r4.setUuid("uuid3"); - final Resume r5 = new Resume(); - r5.setUuid("uuid5"); + final Resume r1 = new Resume("uuid1"); + final Resume r2 = new Resume("uuid2"); + final Resume r6 = new Resume("uuid6"); + final Resume r3 = new Resume("uuid3"); + final Resume r4 = new Resume("uuid3"); + final Resume r5 = new Resume("uuid5"); ARRAY_STORAGE.save(r1); ARRAY_STORAGE.save(r2); diff --git a/src/ru/javawebinar/basejava/exception/ExistStorageException.java b/src/ru/javawebinar/basejava/exception/ExistStorageException.java new file mode 100644 index 00000000..25742a9c --- /dev/null +++ b/src/ru/javawebinar/basejava/exception/ExistStorageException.java @@ -0,0 +1,7 @@ +package ru.javawebinar.basejava.exception; + +public class ExistStorageException extends StorageException{ + public ExistStorageException(String uuid) { + super("Резюме уже существует ID:" + uuid, uuid); + } +} diff --git a/src/ru/javawebinar/basejava/exception/NotExistStorageException.java b/src/ru/javawebinar/basejava/exception/NotExistStorageException.java new file mode 100644 index 00000000..41224ae5 --- /dev/null +++ b/src/ru/javawebinar/basejava/exception/NotExistStorageException.java @@ -0,0 +1,7 @@ +package ru.javawebinar.basejava.exception; + +public class NotExistStorageException extends StorageException{ + public NotExistStorageException(String uuid) { + super("Не найдено резюме ID:" + uuid, uuid); + } +} diff --git a/src/ru/javawebinar/basejava/exception/StorageException.java b/src/ru/javawebinar/basejava/exception/StorageException.java new file mode 100644 index 00000000..ccc8bb65 --- /dev/null +++ b/src/ru/javawebinar/basejava/exception/StorageException.java @@ -0,0 +1,14 @@ +package ru.javawebinar.basejava.exception; + +public class StorageException extends RuntimeException{ + private final String uuid; + + public StorageException(String message, String uuid) { + super(message); + this.uuid = uuid; + } + + public String getUuid() { + return uuid; + } +} diff --git a/src/ru/javawebinar/basejava/model/Resume.java b/src/ru/javawebinar/basejava/model/Resume.java index fcb68435..fcd7c06a 100644 --- a/src/ru/javawebinar/basejava/model/Resume.java +++ b/src/ru/javawebinar/basejava/model/Resume.java @@ -1,17 +1,23 @@ package ru.javawebinar.basejava.model; +import java.util.UUID; + public class Resume implements Comparable{ - private String uuid; + private final String uuid; - public String getUuid() { - return uuid; + public Resume(){ + this(UUID.randomUUID().toString()); } - public void setUuid(String uuid) { + public Resume(String uuid) { this.uuid = uuid; } + public String getUuid() { + return uuid; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java index 9299e9ce..f3335784 100644 --- a/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java @@ -1,5 +1,8 @@ package ru.javawebinar.basejava.storage; +import ru.javawebinar.basejava.exception.ExistStorageException; +import ru.javawebinar.basejava.exception.NotExistStorageException; +import ru.javawebinar.basejava.exception.StorageException; import ru.javawebinar.basejava.model.Resume; import java.util.Arrays; @@ -21,11 +24,9 @@ public final void save(Resume resume) { int index = getIndex(resume.getUuid()); if (STORAGE_LIMIT <= size) { - System.out.println("Storage overflow!"); - return; + throw new StorageException("Storage overflow!", resume.getUuid()); } else if (index >= 0) { - System.out.println("Данный ID:" + resume.getUuid() + " уже существует!"); - return; + throw new ExistStorageException(resume.getUuid()); } size++; putResume(resume, index); @@ -38,15 +39,14 @@ public final void update(Resume resume) { storage[index] = resume; System.out.println("Резюме успешно обновлено ID:" + resume.getUuid()); } else { - System.out.println("Такое резюме не найдено в массиве ID: " + resume.getUuid()); + throw new NotExistStorageException(resume.getUuid()); } } public final Resume get(String uuid) { int index = getIndex(uuid); if (index < 0) { - System.out.println("Не найден данный ID: " + uuid); - return null; + throw new NotExistStorageException(uuid); } return storage[index]; } @@ -55,8 +55,7 @@ public final void delete(String uuid) { int index = getIndex(uuid); if (index < 0) { - System.out.println("Не найдено резюме ID:" + uuid); - return; + throw new NotExistStorageException(uuid); } shrinkArray(index); size--; @@ -64,9 +63,13 @@ public final void delete(String uuid) { } public void clear() { - Arrays.fill(storage, 0, size - 1, null); - size = 0; - System.out.println("Массив полностью очищен!"); + + if(size > 0){ + Arrays.fill(storage, 0, size - 1, null); + size = 0; + System.out.println("Массив полностью очищен!"); + } + } protected abstract int getIndex(String uuid); diff --git a/src/ru/javawebinar/basejava/storage/ArrayStorage.java b/src/ru/javawebinar/basejava/storage/ArrayStorage.java index 57e8128a..992b29a1 100644 --- a/src/ru/javawebinar/basejava/storage/ArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/ArrayStorage.java @@ -16,7 +16,7 @@ protected int getIndex(String uuid) { @Override protected void putResume(Resume resume, int index) { - storage[size] = resume; + storage[size-1] = resume; System.out.println("Резюме успешно сохранено! ID:" + resume.getUuid()); } diff --git a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java index 8cb5ff49..45801395 100644 --- a/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java +++ b/src/ru/javawebinar/basejava/storage/SortedArrayStorage.java @@ -8,8 +8,7 @@ public class SortedArrayStorage extends AbstractArrayStorage { @Override protected int getIndex(String uuid) { - Resume searchKey = new Resume(); - searchKey.setUuid(uuid); + Resume searchKey = new Resume(uuid); return Arrays.binarySearch(storage, 0, size, searchKey); } diff --git a/test/ru/javawebinar/basejava/storage/AbstractArrayStorageTest.java b/test/ru/javawebinar/basejava/storage/AbstractArrayStorageTest.java new file mode 100644 index 00000000..8875fab4 --- /dev/null +++ b/test/ru/javawebinar/basejava/storage/AbstractArrayStorageTest.java @@ -0,0 +1,76 @@ +package ru.javawebinar.basejava.storage; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import ru.javawebinar.basejava.exception.ExistStorageException; +import ru.javawebinar.basejava.exception.NotExistStorageException; +import ru.javawebinar.basejava.model.Resume; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class AbstractArrayStorageTest { + + + private static final Storage storage = new ArrayStorage(); + + @BeforeEach + void beforeEach() { + storage.clear(); + final Resume r1 = new Resume("uuid1"); + final Resume r2 = new Resume("uuid2"); + final Resume r3 = new Resume("uuid3"); + + storage.save(r1); + storage.save(r2); + storage.save(r3); + } + + @Test + void size() { + assertEquals(3, storage.size()); + } + + @Test + void getAll() { + Resume[] testResume = {new Resume("uuid1"), new Resume("uuid2"), new Resume("uuid3")}; + assertArrayEquals(testResume, storage.getAll()); + } + + @Test + void save() { + Resume[] resumes = {new Resume("uuid1"), new Resume("uuid2"), new Resume("uuid3"), new Resume("uuid4")}; + storage.save(new Resume("uuid4")); + assertArrayEquals(resumes, storage.getAll()); + assertThrows(ExistStorageException.class, () -> storage.save(new Resume("uuid4"))); + } + + @Test + void update() { + Resume updatedResume = new Resume("uuid1"); + storage.update(updatedResume); + assertEquals(updatedResume, storage.get("uuid1")); + assertThrows(NotExistStorageException.class, () -> storage.update(new Resume("uuid55"))); + } + + @Test + void get() { + Resume updatedToGet = new Resume("uuid2"); + assertEquals(updatedToGet, storage.get("uuid2")); + } + + @Test + void delete() { + Resume[] testResume = {new Resume("uuid3"), new Resume("uuid2")}; + storage.delete("uuid1"); + assertArrayEquals(testResume, storage.getAll()); + } + + @Test + void clear() { + assertEquals(3, storage.size()); + storage.clear(); + assertEquals(0, storage.size()); + } +} \ No newline at end of file diff --git a/test/ru/javawebinar/basejava/storage/ArrayStorageTest.java b/test/ru/javawebinar/basejava/storage/ArrayStorageTest.java new file mode 100644 index 00000000..dfe3ad7b --- /dev/null +++ b/test/ru/javawebinar/basejava/storage/ArrayStorageTest.java @@ -0,0 +1,20 @@ +package ru.javawebinar.basejava.storage; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ArrayStorageTest { + + @Test + void getIndex() { + } + + @Test + void putResume() { + } + + @Test + void shrinkArray() { + } +} \ No newline at end of file