用于Java中访问/修改的最快数据结构

时间:2012-06-14 08:49:36

标签: java performance data-structures

你好Stackoverflowers!

当我想知道哪个是最快的数据结构,如果我必须访问/编辑大量数据时,我正在为一个项目编写代码?

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

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

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

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

非常感谢,

马哥。

3 个答案:

答案 0 :(得分:3)

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

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

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

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

最后,如果您想要随机插入密钥并让底层结构对其进行排序,您可能会发现TreeMap类很有用。

答案 1 :(得分:1)

有两件事:

1-在当前场景中,如果并发用户不是一个问题,那么你可以轻松选择arraylist作为其更快更简单的数据结构,否则如果并发用户是关注点,那么你可以轻松地使用vector来存储你的事件。

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

我希望它有所帮助。

答案 2 :(得分:0)

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