Skip to content

Commit 242c066

Browse files
committed
сохранение и удаление с бинарным поиском черновое
1 parent 8c46ad7 commit 242c066

4 files changed

Lines changed: 47 additions & 72 deletions

File tree

src/ru/javawebinar/basejava/MainTestArrayStorage.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,24 @@ public static void main(String[] args) {
1212
r1.setUuid("uuid1");
1313
final Resume r2 = new Resume();
1414
r2.setUuid("uuid2");
15+
final Resume r6 = new Resume();
16+
r6.setUuid("uuid6");
1517
final Resume r3 = new Resume();
1618
r3.setUuid("uuid3");
1719
final Resume r4 = new Resume();
1820
r4.setUuid("uuid3");
21+
final Resume r5 = new Resume();
22+
r5.setUuid("uuid5");
23+
1924

2025

2126

2227

2328
ARRAY_STORAGE.save(r1);
2429
ARRAY_STORAGE.save(r2);
2530
ARRAY_STORAGE.save(r3);
31+
ARRAY_STORAGE.save(r6);
32+
ARRAY_STORAGE.save(r5);
2633

2734

2835
System.out.println("Get r1: " + ARRAY_STORAGE.get(r1.getUuid()));

src/ru/javawebinar/basejava/storage/AbstractArrayStorage.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,18 @@ public Resume[] getAll() {
1919
return Arrays.copyOfRange(storage, 0, size);
2020
}
2121

22+
@Override
23+
public void update(Resume resume) {
24+
int index = getIndex(resume.getUuid());
25+
26+
if (index >= 0) {
27+
storage[index] = resume;
28+
System.out.println("Резюме успешно обновлено ID:" + resume.getUuid());
29+
} else {
30+
System.out.println("Такое резюме не найдено в массиве ID: " + resume.getUuid());
31+
}
32+
}
33+
2234
@Override
2335
public void clear() {
2436
if (size == 0) {
@@ -40,8 +52,15 @@ public Resume get(String uuid) {
4052
return storage[index];
4153
}
4254

43-
protected boolean isExisting(int index) {
44-
return index >= 0;
55+
protected boolean overflowOrExist(Resume resume, int index) {
56+
if (STORAGE_LIMIT <= size) {
57+
System.out.println("Storage overflow!");
58+
return true;
59+
} else if (index >= 0) {
60+
System.out.println("Данный ID:" + resume.getUuid() + " уже существует!");
61+
return true;
62+
}
63+
return false;
4564
}
4665

4766
protected abstract int getIndex(String uuid);

src/ru/javawebinar/basejava/storage/ArrayStorage.java

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,41 +8,29 @@ public class ArrayStorage extends AbstractArrayStorage {
88
public void save(Resume resume) {
99
int index = getIndex(resume.getUuid());
1010

11-
if (STORAGE_LIMIT <= size) {
12-
System.out.println("Storage overflow!");
13-
} else if (isExisting(index)) {
14-
System.out.println("Данный ID:" + resume.getUuid() + " уже существует!");
15-
} else {
16-
storage[size] = resume;
17-
size++;
18-
System.out.println("Резюме успешно сохранено! ID:" + resume.getUuid());
11+
if (overflowOrExist(resume, index)) {
12+
return;
1913
}
20-
}
2114

22-
@Override
23-
public void update(Resume resume) {
24-
int index = getIndex(resume.getUuid());
15+
storage[size] = resume;
16+
size++;
17+
System.out.println("Резюме успешно сохранено! ID:" + resume.getUuid());
2518

26-
if (isExisting(index)) {
27-
storage[index] = resume;
28-
System.out.println("Резюме успешно обновлено ID:" + resume.getUuid());
29-
} else {
30-
System.out.println("Такое резюме не найдено в массиве ID: " + resume.getUuid());
31-
}
3219
}
3320

3421
@Override
3522
public void delete(String uuid) {
3623
int index = getIndex(uuid);
3724

38-
if (isExisting(index)) {
39-
storage[index] = storage[size - 1];
40-
storage[size - 1] = null;
41-
size--;
42-
System.out.println("Резюме удалено! ID:" + uuid);
25+
if (index < 0) {
26+
System.out.println("Не найдено резюме ID:" + uuid);
4327
return;
4428
}
45-
System.out.println("Не найдено резюме ID:" + uuid);
29+
30+
storage[index] = storage[size - 1];
31+
storage[size - 1] = null;
32+
size--;
33+
System.out.println("Резюме удалено! ID:" + uuid);
4634
}
4735

4836
@Override

src/ru/javawebinar/basejava/storage/SortedArrayStorage.java

Lines changed: 7 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,66 +6,27 @@
66

77
public class SortedArrayStorage extends AbstractArrayStorage {
88

9-
@Override
10-
public void update(Resume resume) {
11-
int index = getIndex(resume.getUuid());
12-
13-
if (isExisting(index)) {
14-
storage[index] = resume;
15-
System.out.println("Резюме успешно обновлено ID:" + resume.getUuid());
16-
} else {
17-
System.out.println("Такое резюме не найдено в массиве ID: " + resume.getUuid());
18-
}
19-
}
20-
219
@Override
2210
public void save(Resume resume) {
2311
int index = getIndex(resume.getUuid());
2412

25-
if (STORAGE_LIMIT <= size) {
26-
System.out.println("Storage overflow!");
27-
} else if (isExisting(index)){
28-
System.out.println("Данный ID:" + resume.getUuid() + " уже существует!");
29-
} else if (size == 0){
30-
storage[0] = resume;
31-
System.out.println("Резюме успешно сохранено в первую ячейку! ID:" + resume.getUuid());
13+
if (overflowOrExist(resume, index)) {
3214
return;
3315
}
3416

35-
while (true) {
36-
int lowerBound = 0;
37-
int upperBound = size - 1;
38-
int currentIndex = 0;
39-
while (true) {
40-
currentIndex = (upperBound + lowerBound) / 2;
41-
if (storage[currentIndex].compareTo(resume) < 0) {
42-
lowerBound = currentIndex + 1; // its in the upper
43-
if (lowerBound > upperBound)
44-
currentIndex += 1;
45-
storage[currentIndex] = resume;
46-
47-
} else {
48-
upperBound = currentIndex - 1; // its in the lower
49-
if (lowerBound > upperBound)
50-
storage[currentIndex] = resume;
51-
size++;
52-
return;
53-
}
54-
}
55-
}
17+
System.arraycopy(storage, -index - 1, storage, -index, size - index);
18+
storage[-index - 1] = resume;
19+
System.out.println("Резюме успешно добавлено в массив! ID:" + resume.getUuid());
20+
size++;
5621
}
5722

5823
@Override
5924
public void delete(String uuid) {
6025
int index = getIndex(uuid);
61-
if(index < 0 ) {
26+
if (index < 0) {
6227
System.out.println("Не найдено резюме ID:" + uuid);
63-
return;
6428
} else {
65-
Resume[] tempArray = new Resume[size - index - 1];
66-
System.arraycopy(storage, index + 1, tempArray, 0, size - index - 1);
67-
System.out.println(Arrays.toString(tempArray));
68-
System.arraycopy(tempArray, 0, storage, index, size - 1);
29+
System.arraycopy(storage, index + 1, storage, index, size - index - 1);
6930
size--;
7031
System.out.println("Резюме удалено из сортированного массива! ID:" + uuid);
7132
}

0 commit comments

Comments
 (0)