主要思路:
加入時間戳:
- 每一個記錄都加上一個時間,標記每條記錄是何時建立的
- 設置一個setAll記錄也加上一個時間,標記setAll記錄何時建立
- 查詢記錄時,如果某條記錄的時間小於setAll記錄的時間,說明setAll是最新數據,返回setAll記錄的值;如果某條記錄的時間大於setAll記錄的時間,說明記錄的值是最新數據,返回該條記錄的值
import java.util.HashMap;
class Value<T>{
T value;
int time;
public Value(T value, int time){
this.value = value;
this.time = time;
}
}
class MyMap<K, V> {
HashMap<K,Value<V>> map = new HashMap<>();
public int time = 0;//記錄當前添加數據的時間戳
public int setAllTime = -1;//記錄setAll操作的時間戳
V value = null;
public void set(K key, V value){//添加數據
Value<V> temp = new Value<>(value, time);
map.put(key, temp);
time++;
}
public void setAll(V value){//更新所有記錄的值
this.value = value;
setAllTime = time;
time++;
}
public V get(K key){
if (map.containsKey(key)){
if(map.get(key).time<setAllTime){
return value;
}else {
return map.get(key).value;
}
}
return null;
}
}
測試:
public class MyMapTest{
public static void main(String[] args) {
MyMap<Integer,Integer> map = new MyMap<>();
for (int i = 0; i < 5; i++) {
map.set(i,i+1);
}
map.setAll(6);
map.set(0,7);
for (int i = 0; i < 5; i++) {
System.out.println(map.get(i));
}
}
}