建议七十一:推荐使用subList处理局部列表
例子:一个列表中有100个元素,现在要删除索引位置为20~30的元素
public class Client {
public static void main(String[] args) throws Exception {
// 初始化一个固定长度,不可变列表
List<Integer> initData = Collections.nCopies(100,0);
// 转换为可变列表
ArrayList<Integer> list = new ArrayList<Integer>(initData);
// 删除指定范围的元素
list.subList(20,30).clear();
}
}
建议七十二:生成子列表后不要再操作原列表
public class Client {
public static void main(String[] args) throws Exception {
List<String> list = new ArrayList<String>();
List<String> subList = list.subList(0, 2);
// 设置列表为只读状态
list =Collections.unmodifiableList(list);
// 对list进行只读操作
doReadSomething(list);
// 对subList进行读写操作
doReadAndWriteSomething(subList);
}
}
subList生成子列表后,保持原列表的只读状态
建议七十三:使用Comparator进行排序
Comparable接口可以作为实现类的默认排序法,Comparator则是一个类的扩展排序工具
建议七十四:不推荐使用binarySearch对列表进行检索
对一个列表进行检索,使用最多的是indexOf方法。
使用binarySearch要先排序再查找指定值,就性能而言,binarySearch性能更好
建议七十五:集合中的元素必须做到compareTo和equals同步
实现了compareTo方法,就应该覆写equals方法
建议七十六:集合运算时使用更优雅的方式
集合有交集(retainAll),并集(addAll),差集(removeAll)
建议七十七:使用shuffle打乱列表
public class Client {
public static void main(String[] args){
int tagCloudNum = 10;
List<String> tagClouds = new ArrayList<String>(tagCloudNum);
// 打乱顺序
Collections.shuffle(tagClouds);
}
}
shuffle主要用途:
(1)程序的伪装:标签云,或游戏中的打怪,修行,群殴时宝物的分配策略
(2)抽奖程序
(3)安全传输:发送数据时,先随机打乱顺序,在加密发送
建议七十八:减少HashMap中元素的数量
HashMap中元素过多容易内存溢出
建议七十九:集合中的哈希码不要重复
hashCode相同时查找效率低
建议八十:多线程使用Vector或HashTable
Vector是ArrayList的多线程版本,HashTable是HashMapde多线程版本