設計一個set(index, value), get(index) , setAll(value)都爲O(1)的數據結構

主要思路:

加入時間戳:

  • 每一個記錄都加上一個時間,標記每條記錄是何時建立的
  • 設置一個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));
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章