If you're looking for a java specific implementation of a spatial index, the JTS library is fairly lightweight, and provides two spatial index implementations: QuadTree and STRTree. STRTree is just a specific space-optimized implementation of an R-Tree. Due to their hierarchical nature, both approaches (QuadTree and R-Tree) support objects at different scale, from small to big.
One limitation of R-Tree is that inserts are difficult (the JTS implementation doesn't allow inserts) because the index hierarchy is determined by the data, and may need to be changed when data is inserted, while the quadtree hierarchy is fixed regardless of how the data is distributed. This will probably affect your implementation more than feature size.
The Oracle Spatial documentation has good information about which type of spatial indexes work best in specific situations, although some of it is Oracle DB-specific. See the Indexing of Spatial Data section at http://docs.oracle.com/html/A88805_01/sdo_intr.htm