阿里开发手册笔记:集合
1.ArrayList的sublist(form,to)
返回父list的一个视图,包含from不包含to,它是ArrayList的内部类,无法强制转换成ArrayList。
父子做出的非结构性更改(不含大小)会互相影响到彼此
当子list更改大小时,父list也会受到影响。父list修改大小时,子list失效,此时对子list的遍历、增加、删除会抛出
ConcurrentModificationException异常
删除list中的某部分:
list.subList(from, to).clear();
2.list转数组最好使用toArray(T[] array),传入的是类型完全一样的数组,且指定好大小
List<String> list = new ArrayList<String>(2);
list.add("guan");
list.add("bao");
String[] array = new String[list.size()];
array = list.toArray(array);
3.使用Array.asList()将数组转换集合时,不能使用集合修改方法(add、remove、clear),因为其返还的是Arrays内部类对象,不是util包中的集合对象,该方法是一个适配器模式,后台数据仍是原数组,原数组修改数据后转换后的list也会随之修改。
4.泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用add方 法,而<? super T>不能使用get方法,作为接口调用赋值时易出错。
说明:扩展说一下PECS(Producer Extends Consumer Super)原则:
第一、频繁往外读取内容的,适合用<? extends T>。
第二、经常往里插入的,适合用<? super T>。
5.不要再foreach方法中修改集合,修改使用迭代器,在多线程操作中要对迭代器加锁。详情参考https://www.cnblogs.com/luyu1993/p/7148765.html
6.集合初始化指定初始化大小,不确定设置为16(默认),避免多次扩容影响性能
7.使用entrySet而不是keySet,因为后者要遍历两次,前者只需要一次。
8.map存储null值情况:
9.有序性:遍历结果根据规则排列;稳定性:每次遍历元素次序一定
10.利用set去重
11.重写equals就要重写hashCode,同时如果对象需要存储在set或者用作Map key,也需要重写两者。
参考:
1.阿里巴巴开发手册
2.https://www.cnblogs.com/ljdblog/p/6251387.html
3.https://www.cnblogs.com/luyu1993/p/7148765.html
4.https://www.cnblogs.com/lucky_dai/p/5485421.html