-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSoftCache.java
More file actions
81 lines (49 loc) · 3.13 KB
/
SoftCache.java
File metadata and controls
81 lines (49 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//And the light shineth in darkness; and the darkness comprehended it not. (John 1:5)
package com.javarush.task.task34.task3413;
import java.lang.ref.SoftReference;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class SoftCache {
private Map<Long, SoftReference<AnyObject>> cacheMap = new ConcurrentHashMap<>();
public AnyObject get(Long key) {
SoftReference<AnyObject> softReference = cacheMap.get(key);
if (!cacheMap.containsKey(key)) //напишите тут ваш код
return null;
return softReference.get();
}
public AnyObject put(Long key, AnyObject value) {
SoftReference<AnyObject> softReference = cacheMap.put(key, new SoftReference<>(value));
if (softReference != null) { //напишите тут ваш код
AnyObject o = softReference.get();
softReference.clear();
return o;
} else {
return null;
}
}
public AnyObject remove(Long key) {
SoftReference<AnyObject> softReference = cacheMap.remove(key);
if (softReference != null) { //напишите тут ваш код
AnyObject o = softReference.get();
softReference.clear();
return o;
} else {
return null;
}
}
}
/*
Кеш на основании SoftReference
Реализуй логику методов get, put, remove класса SoftCache:
Метод AnyObject get(Long key) должен возвращать объект типа AnyObject из мапы cacheMap по ключу key. Если такого ключа в cacheMap нет - верни null.
Метод AnyObject put(Long key, AnyObject value) должен добавлять в мапу пару key : value. Метод должен вернуть null, если в cacheMap по такому ключу ранее не было значения. Иначе - верни предыдущее значение value по этому ключу. Не забудь вызвать метод clear() у объекта типа SoftReference<AnyObject>.
Метод AnyObject remove(Long key) должен удалить из мапы cacheMap пару key : value по ключу key. Метод должен вернуть null, если в cacheMap по такому ключу ранее не было значения. Иначе - верни предыдущее значение value по этому ключу. Не забудь вызвать метод clear() у объекта типа SoftReference<AnyObject>.
Не изменяй класс AnyObject.
Метод main не принимает участия в тестировании.
Требования:
1. Класс AnyObject не должен быть изменен.
2. В классе SoftCache должно существовать приватное поле Map> cacheMap.
3. Реализуй метод get согласно условию.
4. Реализуй метод put согласно условию.
5. Реализуй метод remove согласно условию.
*/