Skip to content

Commit dec14f5

Browse files
authored
feature/lesson03 (#3)
+ New files: - interface Storage - abstract class AbstractArrayStorage - class SortedArrayStorage + ArrayStorage - extends class AbstractArrayStorage + Resume - added methods equals, hashCode - implements interface Comparable + MainArray, MainTestArrayStorage - switched to SortedArrayStorage
1 parent 9ef24b9 commit dec14f5

7 files changed

Lines changed: 171 additions & 53 deletions

File tree

src/ru/topjava/webapp/MainArray.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package ru.topjava.webapp;
22

33
import ru.topjava.webapp.model.Resume;
4-
import ru.topjava.webapp.storage.ArrayStorage;
4+
import ru.topjava.webapp.storage.SortedArrayStorage;
5+
import ru.topjava.webapp.storage.Storage;
56

67
import java.io.BufferedReader;
78
import java.io.IOException;
@@ -12,7 +13,7 @@
1213
* (just run, no need to understand)
1314
*/
1415
public class MainArray {
15-
private final static ArrayStorage ARRAY_STORAGE = new ArrayStorage();
16+
private final static Storage ARRAY_STORAGE = new SortedArrayStorage();
1617

1718
public static void main(String[] args) throws IOException {
1819
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
@@ -79,4 +80,4 @@ static void printAll() {
7980
}
8081
System.out.println("----------------------------");
8182
}
82-
}
83+
}

src/ru/topjava/webapp/MainTestArrayStorage.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
package ru.topjava.webapp;
22

33
import ru.topjava.webapp.model.Resume;
4-
import ru.topjava.webapp.storage.ArrayStorage;
4+
import ru.topjava.webapp.storage.SortedArrayStorage;
5+
import ru.topjava.webapp.storage.Storage;
6+
7+
import java.util.Arrays;
58

69
/**
710
* Test for your ArrayStorage implementation
811
*/
912
public class MainTestArrayStorage {
10-
static final ArrayStorage ARRAY_STORAGE = new ArrayStorage();
13+
static final Storage ARRAY_STORAGE = new SortedArrayStorage();
1114

1215
public static void main(String[] args) {
1316
Resume resume1 = new Resume();
1417
resume1.setUuid("uuid1");
15-
Resume resume2 = new Resume();
16-
resume2.setUuid("uuid2");
1718
Resume resume3 = new Resume();
1819
resume3.setUuid("uuid3");
20+
Resume resume2 = new Resume();
21+
resume2.setUuid("uuid2");
1922
Resume resume3Update = new Resume();
2023
resume3Update.setUuid("uuid3");
2124
Resume resume4 = new Resume();
@@ -35,11 +38,14 @@ public static void main(String[] args) {
3538
System.out.println("Update non-existing resume4");
3639
ARRAY_STORAGE.update(resume4);
3740

41+
System.out.println("resume2 index: " + Arrays.binarySearch(ARRAY_STORAGE.getAll(), resume2));
3842
printAll();
39-
ARRAY_STORAGE.delete(resume1.getUuid());
43+
ARRAY_STORAGE.delete(resume2.getUuid());
4044
printAll();
45+
System.out.println("resume2 index: " + Arrays.binarySearch(ARRAY_STORAGE.getAll(), resume2));
4146
ARRAY_STORAGE.clear();
4247
printAll();
48+
System.out.println("resume2 index: " + Arrays.binarySearch(ARRAY_STORAGE.getAll(), resume2));
4349

4450
System.out.println("Size: " + ARRAY_STORAGE.size());
4551
}

src/ru/topjava/webapp/model/Resume.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
/**
44
* Initial resume class
55
*/
6-
public class Resume {
6+
public class Resume implements Comparable<Resume> {
77

88
// Unique identifier
99
private String uuid;
@@ -20,4 +20,24 @@ public void setUuid(String uuid) {
2020
public String toString() {
2121
return uuid;
2222
}
23+
24+
@Override
25+
public boolean equals(Object o) {
26+
if (this == o) return true;
27+
if (o == null || getClass() != o.getClass()) return false;
28+
29+
Resume resume = (Resume) o;
30+
31+
return uuid.equals(resume.uuid);
32+
}
33+
34+
@Override
35+
public int hashCode() {
36+
return uuid.hashCode();
37+
}
38+
39+
@Override
40+
public int compareTo(Resume resume) {
41+
return this.getUuid().compareTo(resume.getUuid());
42+
}
2343
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package ru.topjava.webapp.storage;
2+
3+
import ru.topjava.webapp.model.Resume;
4+
5+
import java.util.Arrays;
6+
7+
/**
8+
* Array based storage for Resumes
9+
*/
10+
public abstract class AbstractArrayStorage implements Storage {
11+
protected static final int STORAGE_LENGTH = 10000;
12+
protected final Resume[] storage = new Resume[STORAGE_LENGTH];
13+
protected int size = 0;
14+
15+
public void clear() {
16+
Arrays.fill(storage, 0, size, null);
17+
size = 0;
18+
}
19+
20+
public abstract void save(Resume resume);
21+
22+
public Resume get(String uuid) {
23+
int resumeIndex = getIndex(uuid);
24+
if (resumeIndex < 0) {
25+
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.get: uuid '%1$s' is not exists", uuid));
26+
return null;
27+
} else {
28+
return storage[resumeIndex];
29+
}
30+
}
31+
32+
public abstract void delete(String uuid);
33+
34+
/**
35+
* @return array, contains only Resumes in storage (without null)
36+
*/
37+
public Resume[] getAll() {
38+
return Arrays.copyOf(storage, size);
39+
}
40+
41+
public int size() {
42+
return size;
43+
}
44+
45+
public void update(Resume resume) {
46+
int resumeIndex = getIndex(resume.getUuid());
47+
if (resumeIndex < 0) {
48+
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.update: uuid '%1$s' is not exists", resume.getUuid()));
49+
} else {
50+
storage[resumeIndex] = resume;
51+
}
52+
}
53+
54+
protected abstract int getIndex(String uuid);
55+
}

src/ru/topjava/webapp/storage/ArrayStorage.java

Lines changed: 6 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,41 +5,23 @@
55
import java.util.Arrays;
66

77
/**
8-
* Array based storage for Resumes
8+
* Unsorted array based storage for Resumes
99
*/
10-
public class ArrayStorage {
11-
private Resume[] storage = new Resume[10000];
12-
private int size = 0;
13-
14-
public void clear() {
15-
Arrays.fill(storage, 0, size, null);
16-
size = 0;
17-
}
18-
10+
public class ArrayStorage extends AbstractArrayStorage {
1911
public void save(Resume resume) {
20-
int resumeIndex = getResumeIndex(resume.getUuid());
12+
int resumeIndex = getIndex(resume.getUuid());
2113
if (resumeIndex >= 0) {
2214
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.save: uuid '%1$s' is already exists", resume.getUuid()));
23-
} else if (size >= storage.length) {
15+
} else if (size >= STORAGE_LENGTH) {
2416
System.out.println("ERROR ru.topjava.webapp.storage.ArrayStorage.save: storage is full");
2517
} else {
2618
storage[size] = resume;
2719
size++;
2820
}
2921
}
3022

31-
public Resume get(String uuid) {
32-
int resumeIndex = getResumeIndex(uuid);
33-
if (resumeIndex < 0) {
34-
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.get: uuid '%1$s' is not exists", uuid));
35-
return null;
36-
} else {
37-
return storage[resumeIndex];
38-
}
39-
}
40-
4123
public void delete(String uuid) {
42-
int resumeIndex = getResumeIndex(uuid);
24+
int resumeIndex = getIndex(uuid);
4325
if (resumeIndex < 0) {
4426
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.delete: uuid '%1$s' is not exists", uuid));
4527
} else {
@@ -49,27 +31,7 @@ public void delete(String uuid) {
4931
}
5032
}
5133

52-
/**
53-
* @return array, contains only Resumes in storage (without null)
54-
*/
55-
public Resume[] getAll() {
56-
return Arrays.copyOf(storage, size);
57-
}
58-
59-
public int size() {
60-
return size;
61-
}
62-
63-
public void update(Resume resume) {
64-
int resumeIndex = getResumeIndex(resume.getUuid());
65-
if (resumeIndex < 0) {
66-
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.update: uuid '%1$s' is not exists", resume.getUuid()));
67-
} else {
68-
storage[resumeIndex] = resume;
69-
}
70-
}
71-
72-
private int getResumeIndex(String uuid) {
34+
protected int getIndex(String uuid) {
7335
for (int i = 0; i < size; i++) {
7436
if (storage[i].getUuid().equals(uuid)) {
7537
return i;
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package ru.topjava.webapp.storage;
2+
3+
import ru.topjava.webapp.model.Resume;
4+
5+
import java.util.Arrays;
6+
7+
/**
8+
* Sorted array based storage for Resumes
9+
*/
10+
public class SortedArrayStorage extends AbstractArrayStorage {
11+
public void save(Resume resume) {
12+
int resumeIndex = getIndex(resume.getUuid());
13+
if (resumeIndex >= 0) {
14+
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.save: uuid '%1$s' is already exists", resume.getUuid()));
15+
} else if (size >= STORAGE_LENGTH) {
16+
System.out.println("ERROR ru.topjava.webapp.storage.ArrayStorage.save: storage is full");
17+
} else {
18+
for (int k = size - 1; k >= -(resumeIndex + 1); k--) {
19+
storage[k+1] = storage[k];
20+
}
21+
storage[-(resumeIndex + 1)] = resume;
22+
size++;
23+
24+
}
25+
}
26+
27+
public void delete(String uuid) {
28+
int resumeIndex = getIndex(uuid);
29+
if (resumeIndex < 0) {
30+
System.out.println(String.format("ERROR ru.topjava.webapp.storage.ArrayStorage.delete: uuid '%1$s' is not exists", uuid));
31+
} else {
32+
for (int k = resumeIndex; k < size - 1; k++) {
33+
storage[k] = storage[k+1];
34+
}
35+
size--;
36+
}
37+
}
38+
39+
protected int getIndex(String uuid) {
40+
Resume resumeToSearch = new Resume();
41+
resumeToSearch.setUuid(uuid);
42+
return Arrays.binarySearch(storage, 0, size, resumeToSearch);
43+
}
44+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package ru.topjava.webapp.storage;
2+
3+
import ru.topjava.webapp.model.Resume;
4+
5+
import java.util.Arrays;
6+
7+
import static ru.topjava.webapp.storage.ArrayStorage.STORAGE_LENGTH;
8+
9+
/**
10+
* Array based storage for Resumes
11+
*/
12+
public interface Storage {
13+
14+
void clear();
15+
16+
void save(Resume resume);
17+
18+
Resume get(String uuid);
19+
20+
void delete(String uuid);
21+
22+
/**
23+
* @return array, contains only Resumes in storage (without null)
24+
*/
25+
Resume[] getAll();
26+
27+
int size();
28+
29+
void update(Resume resume);
30+
}

0 commit comments

Comments
 (0)