>如果经常重复使用具有自然语言频率的字符串,请不要对同一字符串使用新的对象实例.
private Map sharedStrings = new HashMap<>().
public void shareString(String s) {
String t = sharedStrings.get(s);
if (t == null) {
t = s;
sharedStrings.put(t, t);
}
return t;
}
>字符串编号可能太慢.
>将字符串列表打包在一个字符串中(用一些控制字符分隔),
并可能会压缩字符串(GZipOutputStream,GZipInputStream).
>调整哈希图具有足够的初始容量. (对不起,我声明很明显.)
>使用巨大的大String []自己分配所有ArrayList:
int count;
String[] allStrings = new String[999999];
Map map = new HashMap<>(9999);
void put(int key, List strings) {
int start = count;
for (String s : strings) {
allStrings[count] = s;
++count;
}
// high: start index, low: size
long listDescriptor = (((long)start) << 32) | (count - start);
map.put(key, listDescriptor);
}
>有些地图实现使用诸如int和long之类的原语;例如trove库(自己未使用过).