3

嗨,Stackoverflowers!

当我想知道如果我必须访问/编辑大量数据时哪个是最快的数据结构可以让我获得最佳性能时,我正在编写一个项目?

让我用一个例子来解释。我有一个名为 User 的类和一个类 Event。一个用户可以有很多事件。到目前为止,我已经使用 ArrayList 实现了这种情况:

public class User{
    ArrayList<Event> events;
    public void process(){
    }
    ...
}
public class Event{
    event data like event time etc.
}

由于我有很多用户(数百万),每个用户都可能有数千个事件,此外,我必须使用 process() 方法访问用户的每个事件,我认为使用 HashMaps 等结构不会有帮助(如果错了请告诉我)。但是,很明显,有了这么多的元素,就需要良好的性能。

那么,您认为处理事件最快的数据结构是什么?

非常感谢你,

马可。

4

3 回答 3

4

这听起来像是更适合数据库的工作,特别是如果您想要持久性和/或您的数据可能不适合您计算机的主内存。

但是,如果您坚持在自己的代码中执行此操作,则可能需要查看LinkedHashMap该类。它允许以恒定(即 O(1))复杂度直接访问其元素,同时还结合了内部链表以允许对所有元素进行快速迭代。

当然,一个HashMap结构是否有用取决于你想做什么。例如,如果您想根据某种标识符搜索事件,那么 aHashMap是理想的。

另一方面,如果您只需要根据事件的插入顺序访问事件,那么您不能做得比 更好ArrayList,因为它支持以恒定复杂性对其内容进行索引访问。如果您只需要在队列或堆栈中处理它们,Java 有几个Deque您可能感兴趣的接口实现。

最后,如果你想随机插入你的键并让底层结构自己对它们进行排序,你可能会发现这个TreeMap类很有用。

于 2012-06-14T08:55:53.313 回答
1

有两件事:

1-在当前情况下,如果并发用户不是问题,那么您可以轻松地使用 arraylist 作为其更快更简单的数据结构,否则如果并发用户是问题,那么您可以轻松地使用向量来存储您的事件。

2-您可以使用队列 DS,这将帮助您进行动态操作,例如插入/删除,这比 arraylist 和 vecotr 更快,因为它使用迭代器。

我希望它有所帮助。

于 2012-06-14T09:07:57.020 回答
0

如果您的数据适合主内存,那么您最好的解决方案是 java 集合和普通数组(取决于随机访问、顺序性、需要持久更改或其他任何内容)如果您的数据增长超过单个系统内存,您将获得更好的性能一些可集群的 no-sql 解决方案(同样,正确工具的选择取决于您喜欢对数据做什么)

于 2012-06-14T09:22:10.257 回答