你好Stackoverflowers!
当我想知道哪个是最快的数据结构,如果我必须访问/编辑大量数据时,我正在为一个项目编写代码?
让我举个例子来解释一下。 我有一个名为User的类和一个类Event。用户可以有很多事件。到目前为止,我已经使用ArrayList实现了这种情况:
public class User{
ArrayList<Event> events;
public void process(){
}
...
}
public class Event{
event data like event time etc.
}
由于我有很多用户(数百万),每个用户可能有数千个事件,而且,我必须使用process()方法访问用户的每个事件,我认为使用像HashMaps等结构不会有帮助(如果错了请告诉我)。 但是,很明显,有了这么多元素,就需要有良好的性能。
那么,您认为处理事件的最快数据结构是什么?
非常感谢,
马哥。
答案 0 :(得分:3)
这听起来像是一个更适合数据库的工作,特别是如果你想要持久性和/或你的数据可能不适合你的计算机的主内存。
但是,如果您坚持在自己的代码中执行此操作,则可能需要查看LinkedHashMap
类。它允许以恒定(即O(1))复杂度直接访问其元素,同时还组合内部链表以允许快速迭代所有元素。
当然,HashMap
结构是否有用取决于您想要做什么。例如,如果您想根据某种标识符搜索事件,那么HashMap
是理想的。
另一方面,如果您只需要根据其插入顺序访问事件,那么您不能比ArrayList
做得更好,因为它支持以恒定复杂度对其内容进行索引访问。如果您只需要在队列或堆栈中处理它们,Java会有几个您可能感兴趣的Deque
接口实现。
最后,如果您想要随机插入密钥并让底层结构对其进行排序,您可能会发现TreeMap
类很有用。
答案 1 :(得分:1)
有两件事:
1-在当前场景中,如果并发用户不是一个问题,那么你可以轻松选择arraylist作为其更快更简单的数据结构,否则如果并发用户是关注点,那么你可以轻松地使用vector来存储你的事件。
2-你可以使用队列DS,它可以帮助你进行动态操作,比如插入/删除,这比arraylist和vecotr更快,因为它使用了迭代器。
我希望它有所帮助。
答案 2 :(得分:0)
如果您的数据适合主内存,那么您最好的解决方案就是java集合和 普通数组(取决于随机访问,顺序性,需要持久更改或其他任何需要)如果您的数据增长超过单个系统内存,您将获得更好的性能与一些可集群的无SQL解决方案(再次,选择正确的工具 取决于你喜欢用你的数据做什么)