Java性能:地图与列表

我在JSF1.2和Richfaces 3.3.2中构建了一个树分页,因为我有很多树节点(类似于80k),并且它很慢..

因此,作为第一次尝试,我使用页面和页面的节点列表创建一个HashMap。

但是,性能不够好……

所以我想知道是否比HashMap更快,可能是列表或其他东西。

有人有这方面的经验吗? 我能做什么?

提前致谢。


编辑。

最大的问题是我必须在树的子节点中validation用户的权限。 我知道这是一个大问题:这个validation很慢,因为我必须进入节点,我没有一个好方法来知道用户是否在10级节点中拥有权限而没有迭代所有节点。 除此之外,同样的三个在更多的地方使用了……我为什么要做这个分页的基本原因是客户端会慢很多,因为richfaces生成的结构,很多tr和td的,浏览器就这么疯狂了。 所以,不幸的是,我必须加载所有节点,并且只是客户端分页,我需要知道它们中的哪些更快迭代…

对不起我的英文不好。

如果要获取页面的所有节点,则哈希映射是最快的数据结构。 节点列表可以在恒定时间(O(1))中获取,而列表时间是O(n)(n =页面数,在排序列表上更快但从未接近O(1))

您的数据结构上的哪些操作太慢 。 这是您在开始优化之前必须分析的内容。

这可能更多是由于JSF是性能猪而不是数据结构选择。 我已经看到创建一个JSF应用程序的一次尝试可以定时与日..

你在没有更多关于根本原因的知识的情况下猜测解决方案是错误的。 我建议您分析您的应用以查看花费的时间。

要使用的数据结构始终取决于您需要如何存储数据以及如何访问它。 如果是密钥HashMap应该在访问值时具有恒定的时间复杂度。 当你调用get(key) ,会计算keyhashCode() ,并用它来检索相关的值。 除非你有不同的密钥具有相同的哈希码(在这种情况下你可能做错了,因为虽然不是强制性的,但不同的对象应该有不同的哈希码,至少在大多数情况下),这通常很快。

搜索普通列表中的元素需要扫描列表,这几乎总是比计算哈希码慢。

如果需要将值与键相关联,则可以使用Map 。 而HashMap应该足够快。

我不太了解JSF,但我认为 – 如果数据结构和访问模式是Map的设计 – 问题不在于HashMap本身。

我会用一个获取子节点的javascript / ajax调用方法来解决这个问题。