设计一个set(index, value), get(index) , setAll(value)都为O(1)的数据结构
2018-03-30 10:18
627 查看
主要思路:
加入时间戳:每一个记录都加上一个时间,标记每条记录是何时建立的
设置一个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));
}
}
}
相关文章推荐
- get(index) set(index value), setAll(value)都为O(1)的数据结构
- (L1) AudioService set , adjust , setAll , get Index, setStreamVolumeInt, adjustStreamVolume
- 设计一个类,用get,set
- 一个tomcat部署两个项目引发的血案:Web app root system property already set to different value: 'webapp.root'
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- 每周数据结构【3】:设计一个非递归的算法求二叉树高度
- 【JDBC】JdbcUtil类加载器加载配置文件,statement.setDate、resultSet.getString("id")、单例工厂设计解耦
- 通过反射将一个对象的值赋给另一个对象中对应的属性 不需要用set、get
- C#中的属性get set value
- UI BOL 练习 get value set attr
- MapX SetKeyField及GetKeyValue使用举例。
- 如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算
- 《数据结构》2.10设计一个算法,删除顺序表中值为item的元素,要求算法的时间复杂度是O(n),空间复杂度是O(1)
- Javascript Get or Set Checked Radio Value
- Java数据结构课程设计 设计一个算法模拟病人等候就诊的过程
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- set,bitset 的一个应用实例——数据结构和比较算法
- 关于PropertyInfo setvalue()和PropertyInfo getvalue()
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- [iOS] objc_setAssociatedObject objc_getAssociatedObject 简单明了的一个理解