Benedikt Ritter wrote: > 2015-05-05 19:13 GMT+02:00 Jörg Schaible <joerg.schai...@gmx.de>: > >> Benedikt Ritter wrote: >> >> > 2015-05-05 17:51 GMT+02:00 Jörg Schaible >> > <joerg.schai...@swisspost.com>: >> > >> >> Hi Benedikt, >> >> >> >> Benedikt Ritter wrote: >> >> >> >> > 2015-05-05 14:52 GMT+02:00 Benedikt Ritter <brit...@apache.org>: >> >> > >> >> >> Hello Jörg, >> >> >> >> >> >> 2015-05-05 8:30 GMT+02:00 Jörg Schaible >> >> >> <joerg.schai...@swisspost.com>: >> >> >> >> >> >>> Hi Benedikt, >> >> >>>
[snip] >> >> >>> What's the benefit of this? Where's the difference by letting >> >> >>> List.toArray() >> >> >>> allocate the appropriate array compared to do it on your own? >> >> >>> ArrayUtils.EMPTY_STRING is a constant after all, so there's no >> >> >>> additional allocation. >> >> >>> >> >> >> >> >> >> I changed this because my IDE complained about that line of code: >> >> >> >> >> >> "Call to 'toArray' with zero-length array argument >> >> >> 'ArrayUtils.EMPTY_STRING_ARRAY' >> >> >> >> >> >> Reports any call to 'toArray' on an object or type or subtype of >> >> >> java.util.Collection with a zero-length argument. When passing an >> >> >> array of too small size, the toArray() method has to construct a >> >> >> new array of the correct size using reflection. This has >> >> >> significantly worse performance than passing in an array of at >> >> >> least the size of >> the >> >> >> collection itself." >> >> >> >> >> >> To be honest, I did not do any performance benchmarks to make sure >> >> >> this is really true. >> >> >> >> >> > >> >> > In any case, the commit message should have been more explanatory. >> >> > Sorry about that. >> >> >> >> Well, that warning is somewhat stupid, if you're using a constant for >> the >> >> zero length array. The "worse performance" only occurs if you provide >> >> a new array instance that is too small. >> >> >> > >> > ... which will always be the case unless the list is empty, or am I >> > missing something here? >> >> Where's the difference in creating a new array of proper size yourself or >> let the method do it? It's even worse now, because now you create a new >> instance *even* if the list is empty. >> > > The difference is, that toArray(T[]) will have to create a new instance > using reflection every time the > ReflectionToStringBuilder.toNoNullStringArray(Object[]) method is invoked > with an non empty array (see ArrayList.toArray(T[]), line 389). The IDE > report complains that this will be significantly slower then creating a > new array of the correct type and size using an array constructor. As I > said, I haven't done any benchmarks. But it seemed logical to me. OK, agreed. Only a micro benchmark on the different Java runtimes will tell. And it might be different for Collection implementations than ArrayList. Nevertheless, I was just curious about the reasoning. Cheers, Jörg --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org