- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的需求是能够在一段时间内将对象存储在数据结构中,然后能够获取特定时间数据的快照。我有一些解决方案,但我想知道是否有更优化的方法来执行此操作。我在想可能有一种方法可以优化存储机制,不需要迭代每个元素来获取当时的快照。
在真实场景中,数据的更新随时都可能到来。数据结构中的对象由整数索引。我用 Map 快速模拟了一些东西来说明我正在尝试做什么(其中 arraylist 是对象的更新历史)。
public class TimeStoreTest {
static SimpleDateFormat df = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
public static void main(String[] args) throws Exception {
Date[] dates = new Date[] { df.parse("2014-01-23 10:30:30"),
df.parse("14-01-23 10:33:30"), df.parse("14-01-23 10:36:30"),
df.parse("14-01-23 10:39:30"), df.parse("14-01-23 10:42:30") };
Map<Integer, List<SimpleObject>> timeStore = new HashMap<Integer, List<SimpleObject>>();
for (int i = 0; i < 10; i += 2) {
List<SimpleObject> objs = new ArrayList<SimpleObject>();
objs.add(new SimpleObject(i, dates[0]));
timeStore.put(i, objs);
}
for (int i = 1; i < 10; i += 2) {
List<SimpleObject> objs = new ArrayList<SimpleObject>();
objs.add(new SimpleObject(i, dates[1]));
timeStore.put(i, objs);
}
for (int i = 0; i < 10; i += 2) {
List<SimpleObject> objs = timeStore.get(i);
objs.add(new SimpleObject(i, dates[2]));
}
for (int i = 1; i < 10; i += 2) {
List<SimpleObject> objs = timeStore.get(i);
objs.add(new SimpleObject(i, dates[3]));
}
for (int i = 5; i < 10; i++) {
List<SimpleObject> objs = timeStore.get(i);
objs.add(new SimpleObject(i, dates[4]));
}
System.out.println("Current Data Store: ");
for (Entry<Integer, List<SimpleObject>> entry : timeStore.entrySet()) {
System.out.println(entry);
}
Date queryDate = df.parse("14-01-23 10:31:00");
System.out.println("Query for object snapshot @ " + queryDate);
for (SimpleObject obj : getObjectsAtTime(queryDate, timeStore)) {
System.out.println(obj);
}
queryDate = df.parse("14-01-23 10:34:30");
System.out.println("Query for object snapshot @ " + queryDate);
for (SimpleObject obj : getObjectsAtTime(queryDate, timeStore)) {
System.out.println(obj);
}
queryDate = df.parse("14-01-23 10:39:30");
System.out.println("Query for object snapshot @ " + queryDate);
for (SimpleObject obj : getObjectsAtTime(queryDate, timeStore)) {
System.out.println(obj);
}
queryDate = df.parse("14-01-23 10:42:00");
System.out.println("Query for object snapshot @ " + queryDate);
for (SimpleObject obj : getObjectsAtTime(queryDate, timeStore)) {
System.out.println(obj);
}
queryDate = df.parse("14-01-23 10:45:00");
System.out.println("Query for object snapshot @ " + queryDate);
for (SimpleObject obj : getObjectsAtTime(queryDate, timeStore)) {
System.out.println(obj);
}
}
public static List<SimpleObject> getObjectsAtTime(Date date,
Map<Integer, List<SimpleObject>> store) {
List<SimpleObject> objectsAtTime = new ArrayList<SimpleObject>();
for (Entry<Integer, List<SimpleObject>> entry : store.entrySet()) {
SimpleObject previousObject = null;
List<SimpleObject> list = entry.getValue();
for (int i = 0; i < list.size(); i++) {
SimpleObject currentObject = list.get(i);
if (previousObject != null) {
if (date.after(previousObject.updatedTime)
&& date.before(currentObject.updatedTime)) {
objectsAtTime.add(previousObject);
break;
} else if (currentObject.updatedTime.equals(date)) {
objectsAtTime.add(currentObject);
break;
} else if (i == list.size() - 1
&& date.after(previousObject.updatedTime)) {
objectsAtTime.add(currentObject);
}
}
previousObject = currentObject;
}
}
return objectsAtTime;
}
}
class SimpleObject implements Comparable {
int id;
Date updatedTime;
public SimpleObject(int id, Date updatedTime) {
this.id = id;
this.updatedTime = new Date(updatedTime.getTime());
}
@Override
public String toString() {
return "(object id=" + id + "; t="
+ TimeStoreTest.df.format(updatedTime) + ")";
}
@Override
public int compareTo(Object object) {
// TODO Auto-generated method stub
return updatedTime.compareTo(((SimpleObject) object).updatedTime);
}
}
结果:
当前数据存储:
0=[(object id=0; t=14-01-23 10:30:30), (object id=0; t=14-01-23 10:36:30)]
1=[(object id=1; t=14-01-23 10:33:30), (object id=1; t=14-01-23 10:39:30)]
2=[(object id=2; t=14-01-23 10:30:30), (object id=2; t=14-01-23 10:36:30)]
3=[(object id=3; t=14-01-23 10:33:30), (object id=3; t=14-01-23 10:39:30)]
4=[(object id=4; t=14-01-23 10:30:30), (object id=4; t=14-01-23 10:36:30)]
5=[(object id=5; t=14-01-23 10:33:30), (object id=5; t=14-01-23 10:39:30), (object id=5; t=14-01-23 10:42:30)]
6=[(object id=6; t=14-01-23 10:30:30), (object id=6; t=14-01-23 10:36:30), (object id=6; t=14-01-23 10:42:30)]
7=[(object id=7; t=14-01-23 10:33:30), (object id=7; t=14-01-23 10:39:30), (object id=7; t=14-01-23 10:42:30)]
8=[(object id=8; t=14-01-23 10:30:30), (object id=8; t=14-01-23 10:36:30), (object id=8; t=14-01-23 10:42:30)]
9=[(object id=9; t=14-01-23 10:33:30), (object id=9; t=14-01-23 10:39:30), (object id=9; t=14-01-23 10:42:30)]
Query for object snapshot @ Thu Jan 23 10:31:00 PST 2014
(object id=0; t=14-01-23 10:30:30)
(object id=2; t=14-01-23 10:30:30)
(object id=4; t=14-01-23 10:30:30)
(object id=6; t=14-01-23 10:30:30)
(object id=8; t=14-01-23 10:30:30)
Query for object snapshot @ Thu Jan 23 10:34:30 PST 2014
(object id=0; t=14-01-23 10:30:30)
(object id=1; t=14-01-23 10:33:30)
(object id=2; t=14-01-23 10:30:30)
(object id=3; t=14-01-23 10:33:30)
(object id=4; t=14-01-23 10:30:30)
(object id=5; t=14-01-23 10:33:30)
(object id=6; t=14-01-23 10:30:30)
(object id=7; t=14-01-23 10:33:30)
(object id=8; t=14-01-23 10:30:30)
(object id=9; t=14-01-23 10:33:30)
Query for object snapshot @ Thu Jan 23 10:39:30 PST 2014
(object id=0; t=14-01-23 10:36:30)
(object id=1; t=14-01-23 10:39:30)
(object id=2; t=14-01-23 10:36:30)
(object id=3; t=14-01-23 10:39:30)
(object id=4; t=14-01-23 10:36:30)
(object id=5; t=14-01-23 10:39:30)
(object id=6; t=14-01-23 10:36:30)
(object id=7; t=14-01-23 10:39:30)
(object id=8; t=14-01-23 10:36:30)
(object id=9; t=14-01-23 10:39:30)
Query for object snapshot @ Thu Jan 23 10:42:00 PST 2014
(object id=0; t=14-01-23 10:36:30)
(object id=1; t=14-01-23 10:39:30)
(object id=2; t=14-01-23 10:36:30)
(object id=3; t=14-01-23 10:39:30)
(object id=4; t=14-01-23 10:36:30)
(object id=5; t=14-01-23 10:39:30)
(object id=6; t=14-01-23 10:36:30)
(object id=7; t=14-01-23 10:39:30)
(object id=8; t=14-01-23 10:36:30)
(object id=9; t=14-01-23 10:39:30)
Query for object snapshot @ Thu Jan 23 10:45:00 PST 2014
(object id=0; t=14-01-23 10:36:30)
(object id=1; t=14-01-23 10:39:30)
(object id=2; t=14-01-23 10:36:30)
(object id=3; t=14-01-23 10:39:30)
(object id=4; t=14-01-23 10:36:30)
(object id=5; t=14-01-23 10:42:30)
(object id=6; t=14-01-23 10:42:30)
(object id=7; t=14-01-23 10:42:30)
(object id=8; t=14-01-23 10:42:30)
(object id=9; t=14-01-23 10:42:30)
所以,您可以看到它有效,但我正在努力寻找提高效率的方法。
最佳答案
使用 NavigableMap 可能会让您的生活更轻松。看看例如 TreeMap#floorEntry()
它的作用类似于您的 getObjectsAtTime
方法。
它还有其他方法,例如 subMap
也可能很方便。
关于java - 时间快照的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21321562/
Maven – 快照 大型软件应用程序通常由多个模块组成,这是多个团队工作于同一应用程序的不同模块的常见场景。例如一个团队工作负责应用程序的前端应用用户接口工程(app-ui.jar:1.0)),同
我的 ES 快照不起作用或看起来是空的。 首先,我在我的 Ubuntu 服务器上做了这个: 1.创建备份目录 mkdir /home/admin/dumps/elasticsearch 2. 将此目录
您好,我想将折线图保存为预定义尺寸 (x, y) 的图像。有没有简单的方法来做到这一点?我找不到任何合适的 Snapshot 参数。 WritableImage image = lineCha
我将 Genymotion 与 Oracle VirtualBox 一起使用,但是我有 250 GB 的 SSD,并且我遇到了(快照)问题 我在这里搜索并搜索,我找不到任何可能的方法来禁用自动快照,因
我们想使用 Grafana 来显示测量数据。现在,我们的测量设置创建了大量数据并保存在文件中。我们按原样保留文件,并直接使用 Spark(“数据湖”方法)对其进行后处理。 我们现在想要创建一些可视化,
我不知道如何制作节点组的快照。也就是说,我想制作一个覆盖有数字的 PNG 图标图像(例如未读消息)。 我的代码: int totalNumberOfUnreadMessages = 1; ImageV
我们想使用 Grafana 来显示测量数据。现在,我们的测量设置创建了大量数据并保存在文件中。我们按原样保留文件,并直接使用 Spark(“数据湖”方法)对其进行后处理。 我们现在想要创建一些可视化,
这个问题在这里已经有了答案: How do I return the response from an asynchronous call? (41 个回答) 关闭 4 年前。 function i
我试图在运行我的程序时保存所有内容。我想保存每个游戏对象及其脚本和变量。我知道可以序列化所有内容并将其保存为 XML(以及其他方式/格式,如 JSON)。这将需要大量的工作和时间。该程序将来可能会发生
我正在玩 Screeps ( http://screeps.com/ ) 模拟房间模式。我已经测试了一些东西,我不想失去我的进步。 我可以在模拟房间模式下拍摄快照并保存我的房间状态,这样我就不必从头开
我的应用程序的测试人员报告:“最近的应用程序列表中的应用程序缩略图根本没有调整。在我看来,它要么像主屏幕壁纸(tolikdru:可能,只是透明的矩形),要么像应用程序屏幕的绿色背景,但从来没有真正的应
这个问题在这里已经有了答案: JavaFX I want to save Chart-Image completely (1 个回答) 关闭 3 年前。 我正在尝试获取“Java 弹出窗口”的快照。
我正在使用 pymongo 从 MongoDB 中插入和检索数据。这两个操作可以同时执行。问题是我什么时候做 rows = db..find()在pymongo中,每次rows.count()返回不同
如何获取通过 选择的视频文件的快照在视频中的特定时间在后台静默(即没有可见元素、闪烁、声音等)? 最佳答案 主要有四个步骤: 创建 和 元素。 加载src URL.createObjectURL 生
您好,我正在使用 JavaFx WebView 创建 HTML 页面的屏幕截图,它工作正常,但我想知道是否可以在不在图形窗口中启动应用程序的情况下执行此操作!!我的意思是没有比这更轻量级的方法来获取屏
所以我有一个 horizontalscrollview,我想尝试添加一个对齐效果,它基本上使元素居中。到目前为止,我基本上都是用 XML 完成的。 然后我在里面有一个 LinearLayout。
调用 URL http:///gitweb.cgi?p=;a=tree;f=;hb=HEAD将显示 的树从 开始. 调用 URL http:///gitweb.cgi?p=;a=snapshot;
我们知道,Maven 项目第一次构建时,会自动从远程仓库搜索依赖项,并将其下载到本地仓库中。当项目再进行构建时,会直接从本地仓库搜索依赖项并引用,而不会再次向远程仓库获取。这样的设计能够避免项目每次构
这个问题在这里已经有了答案: Freeze screen in chrome debugger / DevTools panel for popover inspection? (9 个回答) 关闭
我正在开发一个向 DVR 和 IP 摄像机请求快照的应用程序。我正在开发的设备只提供 RTSP 请求。然后我实现了必要的 RTSP 方法来开始接收流数据包,然后通过建立的 UDP 连接开始接收。我的疑
我是一名优秀的程序员,十分优秀!