There are lots of ways to implement the UCA. When you want fast string comparison, the zero weights are useful for processing -- and you don't actually assemble a sort key.
People who want sort keys usually want them to be short, so you spend time on compression. You probably also build sort keys as byte vectors not uint16 vectors (because byte vectors fit into more APIs and tend to be shorter), like ICU does using the CLDR collation data file. The CLDR root collation data file remunges all weights into fractional byte sequences, and leaves gaps for tailoring. markus

