question: public void insert ( String key , char val ) { int len = key . length ( ) + 1 ; if ( freenode + len > eq . length ) { redimNodeArrays ( eq . length + BLOCK_SIZE ) ; } char strkey [ ] = new char [ len -- ] ; key . getChars ( 0 , len , strkey , 0 ) ; strkey [ len ] = 0 ; root = insert ( root , strkey , 0 , val ) ; }
target:  Branches are initially compressed, needing one node per key plus the size of the string key. They are decompressed as needed when another key with same prefix is inserted. This saves a lot of space, specially for long keys.