1、Java容器的一个特点就是可以动态扩展,如果容量不够会自动扩容。一些基于数组的数据结构,例如StringBuilder
、StringBuffer
、ArrayList
、HashMap
等等,在扩容的时候都需要做ArrayCopy,对于不断增长的结构来说,经过自动扩容,会存在大量无用的老数组,而回收这些数组的压力,全都会加在GC身上。
这些容器的构造函数中通常都有一个可以指定大小的参数,如果对于某些大小可以预估的容器,建议加上这个参数。
可是因为容器的扩容并不是等到容器满了才扩容,而是有一定的比例,例如HashMap
的扩容阈值和负载因子(loadFactor)相关。
Google Guava框架对于容器的初始容量提供了非常便捷的工具方法,可以参考其源代码,例如:
Lists.newArrayListWithCapacity(initialArraySize);
Lists.newArrayListWithExpectedSize(estimatedSize);
Sets.newHashSetWithExpectedSize(expectedSize);
Maps.newHashMapWithExpectedSize(expectedSize);
2、String类的trim();方法默认去除首尾的半角空格。
3、未完待续。