Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java性能:映射与列表_Java_Performance - Fatal编程技术网

Java性能:映射与列表

Java性能:映射与列表,java,performance,Java,Performance,我在JSF1.2和Richfaces 3.3.2中构建了一个树分页,因为我有很多树节点(大约80k),而且速度很慢 因此,作为第一次尝试,我创建了一个包含页面和页面节点列表的HashMap 但是,性能还不够好 所以我想知道是不是有什么比HashMap更快的东西,也许是列表列表之类的东西 有人有这方面的经验吗?我能做什么 提前谢谢 编辑 最大的问题是我必须在树的子节点中验证用户的权限。我知道这是一个大问题:这个验证很慢,因为我必须进入节点内部,如果不迭代所有节点,我没有一个好方法来知道用户是否拥

我在JSF1.2和Richfaces 3.3.2中构建了一个树分页,因为我有很多树节点(大约80k),而且速度很慢

因此,作为第一次尝试,我创建了一个包含页面和页面节点列表的HashMap

但是,性能还不够好

所以我想知道是不是有什么比HashMap更快的东西,也许是列表列表之类的东西

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

提前谢谢


编辑

最大的问题是我必须在树的子节点中验证用户的权限。我知道这是一个大问题:这个验证很慢,因为我必须进入节点内部,如果不迭代所有节点,我没有一个好方法来知道用户是否拥有10级节点的权限。除此之外,同样的三个已经在更多的地方使用。。。 我之所以要进行这种分页,最基本的原因是客户端的速度会慢得多,因为richfaces生成的结构,很多tr和td,浏览器对此非常着迷。 所以,不幸的是,我必须加载所有节点,只在客户端分页,我需要知道其中哪些节点迭代更快


对不起,我的英语不好。

这可能更多地是因为JSF是一个性能猪,而不是一个数据结构选择。我所看到的创建JSF应用程序的一次尝试可以用日晷计时


你在不了解根本原因的情况下猜测解决方案,这是一个错误。我建议您对应用程序进行配置,以查看时间花在哪里。

如果您想获取页面的所有节点,哈希映射是最快的数据结构。节点列表可以在固定时间(O(1))内获取,而列表的时间为O(n)(n=页数,排序后的列表速度更快,但永远不会接近O(1))


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

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

要使用的数据结构始终取决于您需要如何存储数据以及需要如何访问数据
HashMap
假定在访问值时具有恒定的时间复杂度,前提是提供键。调用
get(key)
时,将计算
key
hashCode()
,并用于检索相关值。除非您有不同的密钥具有相同的哈希代码(在这种情况下,您可能做了一些错误的事情,因为不同的对象应该具有不同的哈希代码,至少在大多数情况下是这样),否则这通常是快速的

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

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


我对JSF了解不多,但我认为-如果数据结构和访问模式是
Map
的设计目标-问题不在于
HashMap
本身;在一个集合中加载所有数据是错误的,分页器背后的整个思想是只加载您当时需要的数据的相关子集。这取决于您如何使用这些集合以及什么是缓慢的。您能提供一些关于如何实现分页的详细信息吗。另外,您是否分析了您的代码?如果是这样的话,访问/填充结构、加载数据或页面上的表达式的缓慢部分是什么?
List
Map
是具有不同目标的集合,我认为这种比较是错误的。对于编辑:如果您必须通过检查元素的所有子元素来检查元素的权限,那么您的模型显然是错误的。。。你应该回去重新设计系统,让它以一种有效的方式工作,而不是试图在视图中修补它。+1:如果你没有衡量应用程序的性能,你只是在猜测。我敢打赌你会发现HashMap甚至不会出现在你的个人资料结果中