阿里巴巴开发手册——集合

阿里开发手册笔记:集合

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 list = new ArrayList(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.泛型通配符来接收返回的数据,此写法的泛型集合不能使用add方 法,而不能使用get方法,作为接口调用赋值时易出错。

说明:扩展说一下PECS(Producer Extends Consumer Super)原则:

第一、频繁往外读取内容的,适合用

第二、经常往里插入的,适合用

原因看这里

5.不要再foreach方法中修改集合,修改使用迭代器,在多线程操作中要对迭代器加锁。详情参考https://www.cnblogs.com/luyu1993/p/7148765.html

6.集合初始化指定初始化大小,不确定设置为16(默认),避免多次扩容影响性能

7.使用entrySet而不是keySet,因为后者要遍历两次,前者只需要一次。

8.map存储null值情况:

阿里巴巴开发手册——集合_第1张图片

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

 

 

你可能感兴趣的:(java)