Hi, yes, every List support indexes, but it dependes on implementation if that index-based access is fast or not. For example, ArrayList is fast, because it uses array internally; and also flags that with interface java.util.RandomAccess
But LinkedList for example just iterates the list until it reaches the index you specified - there is the dangerous problem. Mike Kienenberger píše v Út 10. 05. 2011 v 16:17 -0400: > If getChildren() is always of type List, then it really doesn't matter > if it's ArrayList or ChildArrayList or some other kind of list. You > can use indexes for any type of List. > > On Tue, May 10, 2011 at 4:11 PM, Martin Koci > <martin.kocicak.k...@gmail.com> wrote: > > Hi, > > > > in current codebase, myfaces use mostly enhanced loop for iterating over > > chidren: > > > > for (UIComponent child: getChildren()) > > > > that creates new instance of iterator. > > > > After change to plain old indices: > > > > for (i = 0; i < childCount; i++) > > child = getChildren().get(i); > > > > I achieved following results in my test case: > > > > 1) number of AbstractList$Itr from ~ 100 000 down to ~1500 instances per > > one render/response > > > > 2) time for one render/response from ~1500ms down to ~900ms > > > > please see https://issues.apache.org/jira/browse/MYFACES-3130 for more > > details. > > > > We know that getChildren() is type of ArrayList > > (javax.faces.component._ComponentChildrenList) - in this situation is > > index-based loop safe change. > > > > But custom component can override implementation of getChildren() and > > provide own implementation which can be slower: I know about Trinidad: > > uses ArrayList too, so no risk here > > (org.apache.myfaces.trinidad.component.ChildArrayList) > > > > I use RichFaces and PrimeFaces too and don't see custom implementation > > of children in their codebase. > > > > What do you think about this problem? The performance gain is pretty big > > but also risky. > > > > > > Regards, > > > > Kočičák > > > > >