Skip to content

Commit f7df6a3

Browse files
committed
update class InMemoryHistoryManager
1 parent 6e30368 commit f7df6a3

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed

src/ru/yandex/javacource/golotin/schedule/service/InMemoryHistoryManager.java

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import ru.yandex.javacource.golotin.schedule.model.Task;
99

1010
public class InMemoryHistoryManager implements HistoryManager {
11+
1112
private static class Node {
1213
Task item;
1314
Node next;
@@ -20,15 +21,21 @@ private static class Node {
2021
}
2122
}
2223

23-
Map<Integer, Node> history = new HashMap<>();
24-
Node first;
25-
Node last;
24+
private static final Map<Integer, Node> history = new HashMap<>();
25+
private Node first;
26+
private Node last;
2627

2728
@Override
2829
public void add(Task task) {// добавление Task
29-
Node node = history.get(task.getId());
30-
removeNode(node);
31-
linkLast(task);
30+
31+
if (task == null) {
32+
return;
33+
}else {
34+
remove(task.getId());
35+
linkLast(task);
36+
history.put(task.getId(), last);
37+
38+
}
3239
}
3340

3441
@Override
@@ -45,22 +52,40 @@ public List<Task> getAll() {// вывод списка истории
4552

4653
@Override
4754
public void remove(int id) {// удаление по id
48-
Node node = history.get(id);
55+
final Node node = history.remove(id);
56+
if (node == null) {
57+
return;
58+
}
4959
removeNode(node);
5060
}
5161

52-
private void removeNode(Node node) {// Удаление из связанного списка
53-
history.remove(node.item.getId());
62+
private void removeNode(Node node) {
63+
64+
if (node.prev != null) {
65+
node.prev.next = node.next;
66+
if (node.next == null) {
67+
last = node.prev;
68+
} else {
69+
node.next.prev = node.prev;
70+
}
71+
} else {
72+
first = node.next;
73+
if (first == null) {
74+
last = null;
75+
} else {
76+
first.prev = null;
77+
}
78+
}
5479
}
5580

56-
void linkLast(Task task) {// двигаем историю
57-
final Node l = last;
58-
final Node newNode = new Node(l, task, null);
81+
private void linkLast(Task task) {// двигаем историю
82+
final Node lastLink = last;
83+
final Node newNode = new Node(lastLink, task, null);
5984
last = newNode;
60-
if (l == null) {
85+
if (lastLink == null) {
6186
first = newNode;
6287
} else {
63-
l.next = newNode;
88+
lastLink.next = newNode;
6489
}
6590
}
6691
}

0 commit comments

Comments
 (0)