This version of FastArrayList looks to be from two to twenty times as fast as the one currently in Collections. (Differences are sure to be found on different machines and JVMs, but it does seem to be much faster.) I found over a twofold speed gain under the Java 1.4.0 'server' VM, as well as a twentyfold gain under the 1.4.0 'client' VM, on my machine (a laptop running WinXP Pro, 512M, 1.2 GHz). I really like the FastArrayList class, I just thought it would be nice if it could be faster.
I achieved the speed increase mainly by reducing method-call overhead. Instead of wrapping instances of ArrayList, I took the code from ArrayList itself and adapted it to the FastArrayList concept, directly swapping out arrays instead of ArrayList instances. I preserved the behavior of FastArrayList wherever appropriate, actually adding more synchronization in a couple of places. I made a test script that extends TestList. I had problems with the script, but I really suspect that it is with the test script this time (and/or the way I have JUnit set up). At least, I find statements like the following very puzzling: 1) testEmptyListSerialization(org.apache.commons.collections.TestFastArrayList2) java.io.NotSerializableException: java.lang.Object 3) testEmptyListCompatibility(org.apache.commons.collections.TestFastArrayList2) java.io.FileNotFoundException: data\test\FastArrayList2.emptyCollection.version1.obj (The system cannot find the path specified) The only serialization code in the class is 'implements Serializable'. What is an .obj file? Now check out the following output statement from the script; for the life of me, I can't understand it: 1) testListAddByIndex(org.apache.commons.collections.TestFastArrayList2) junit.framework.AssertionFailedError: List should equal confirmed expected:<[0, , One, 2, Three, null, 4, One, 5.0, 6.0, Seven, Eight, Nine, 10, 11, 12, Thirteen, 14, 15, 16]> but was:<[0, , One, 2, Three, null, 4, One, 5.0, 6.0, Seven, Eight, Nine, 10, 11, 12, Thirteen, 14, 15, 16]> The two lists look identical! This is awfully strange-seeming. I've thought of a way to speed up writes to the data structure even more while it's in fast mode, but I haven't put it in yet. Please take a look at the attached code and see if it looks like it will be useful. I spent much of my evening messing around with it, and now I'm going to bed. The class is called FastArrayList2, the test class is called TestFastArrayList2, and I also threw in the test-script results for good measure. The test script has a method named compareSpeed() that gives a rudimentary comparison of fast-mode read speed between the two versions. Thanks, Jeff P.S. I renamed setFast(boolean) and getFast() setFastModeEnabled(boolean) and isFastModeEnabled(), but I preserved the old signatures too. JKV __________________________________________________ Do you Yahoo!? Yahoo! Web Hosting - Let the expert host your site http://webhosting.yahoo.com
FastArrayList_revamp.zip
Description: FastArrayList_revamp.zip
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>