Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 NodeList是数组、列表还是其他什么?_Java_Performance_Dom - Fatal编程技术网

Java NodeList是数组、列表还是其他什么?

Java NodeList是数组、列表还是其他什么?,java,performance,dom,Java,Performance,Dom,我正在写一篇关于java性能的演讲,我试图确定这是否是一个糟糕的做法。我是C++的人,所以我还不知道java的一切。我没有该项目的源代码,我需要一个快速的答案 这对性能是否有害: NodeList elems; // public abstract interface org.w3c.dom.NodeList for (int i = 0; i < elems.getLength(); i++) { elem = elems.item(i); if (elem.getNodeT

我正在写一篇关于java性能的演讲,我试图确定这是否是一个糟糕的做法。我是C++的人,所以我还不知道java的一切。我没有该项目的源代码,我需要一个快速的答案

这对性能是否有害:

NodeList elems;  // public abstract interface org.w3c.dom.NodeList 
for (int i = 0; i < elems.getLength(); i++) {
  elem = elems.item(i);
  if (elem.getNodeType() == Node.ELEMENT_NODE) {
    // do something with a node
  }
}
我首先担心的是NodeList可能会使用一个链表来实现,在这种情况下,itemi将是一场灾难

还有其他想法吗?

节点列表是一个接口,如果不知道您正在/将要使用哪个实现,就不可能说出它是如何实现的

界面如下所示:

interface NodeList {
  int getLength();
  Node item(int index);
}
说:

NodeList接口提供节点有序集合的抽象,而不定义或约束如何实现该集合。DOM中的节点列表对象是活动的


这取决于实施情况。例如,OpenJDK提供了一个

这可能会产生其他性能保证。您应该尝试确定正在处理的节点列表的实现类,并检查其源代码。

根据Java文档

节点列表是节点的有序集合,因此我假设它是一个排序列表。如果内存没问题,ArrayList会在引擎盖下使用规则数组背后的逻辑。我之所以怀疑它是一个列表,主要是因为它的名字是nodeLIST


至于itemindex,它要么返回索引处的项,要么返回null。这同样来自API。希望这对我有所帮助,我并没有太多使用节点列表

WC3标准规定了节点列表的底层数据结构,因此它是数组还是链表,或者两者都是,取决于DOM的实现。但是,NodeList接口只定义了getLength和itemi,因此无论性能如何,您编写的代码几乎是完成任务的唯一方法。

此接口有几种实现方式。我不知道你在看哪一个。@Luiggmendoza它被展开了。@Luiggmendoza和我链接到了源文件。OP正在寻找公共接口org.w3c.dom。NodeList@LuiggiMendoza如何判断?使用初始化为ArrayList或LinkedList的列表。不要使用此库,因为它用于web服务。这似乎是一个糟糕的库。什么是好的?还不错。事实上,它是Java内部使用的,并不意味着程序员可以直接使用它。关于这个接口的使用,你想展示什么?我已经得到了一段在xml文件中遍历节点的代码。我不明白这是如何回答这个问题的。这更像是一个评论,里面有很多文字。我喜欢你的回答,这是唯一的方式。我还喜欢djechlins关于实际实现的细节。我希望我能接受这两个答案。
public Node item(int index) {
     if (index < 0) {
         return null;
     }

     Node child = getFirstChild();
     while (child != null && index-- > 0) {
         child = child.getNextSibling();
     }
     return child;
 }
com.sun.org.apache.xerces.internal.dom.DeepNodeListImpl
com.sun.org.apache.xml.internal.dtm.ref.DeepNodeListImpl
com.sun.org.apache.xml.internal.security.utils.HelperNodeList
// ...