阿里开发手册之集合处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38005943/article/details/81977257

hashCode和equals
1.只要重写equals,就必须重写hashCode
2.因为Set存储的是不重复的对象(根据hashCode和equals判断),所以Set储存的对象必须重写这两个方法
3.如果自定义对象作为Map的Key,必须重写hashCode和equals

ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异常
reason:subList()方法返回的是ArrayList的内部类SubList(ArrayList的一个视图),对于SubList子列表的所有操作最终会反映到原列表上(使用subList截取ArrayList要特别小心)

在subList场景中,高度注意对原集合元素的增加或删除,均会导致子列表的遍历,增加,删除产生ConcurrentModificationException

集合转数组的方法,使用toArray(T[] array) 传入的是类型完全一样的数组,大小是list.size()

String[] array=new String[list.size()];

array=list.toArray(array)

使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常

asList的返回对象时一个Arrays内部类,并没有实现集合的修改方法(适配器模式),只是转换接口,后台的数据仍是数组

泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用add方法,
而<? super T> 不能使用get方法,作为接口调用赋值时易出错
    PECS(Producer Extends Consumer Super)原则:
    第一:频繁往外读取内容,适合用<? extends T>
    第二:经常往里插入的,适合用<? super T>

不要在foreach循环里进行元素的remove/add操作.remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁

在JDK7及以上,Comparator实现类要满足以下三个条件,才能使用Arrays.sort;Collections.sort 不然会抛出异常
1.x,y的比较结果和y,x的比较结果相反
2.x>y,y>z,则x>z
3.x=y,则x,z比较结果和y,z比较结果相同

集合泛型定义时,在jdk7及以上,使用diamond语法或全省略
diamond,直接使用<>来指代前边已经指定的类型
//diamond
HashMap<String,String> userCache=new HashMap<>(16);
//全省略
ArrayList<User> users=new ArrayList(10);

集合初始化时,指定集合初始值大小(减少resize次数)
HashMap使用HashMap(int initialCapacity)初始化 initialCapacity)=(需要存储的元素个数/负载因子)+1 负载因子默认0.75 
HashMap未知大小,默认16

使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历(要先转为Iterator对象,遍历两次 效率低)

Map类集合K/V能不能存储null值的情况
集合类                           Key              Value           Super               说明
Hashtable                     不能为null    不能为null     Dictionary        线程安全
ConcurrentHashMap    不能为null    不能为null     AbstractMap    锁分段技术(JDK8:CAS)
TreeMap                       不能为null    可以null        AbstractMap    线程不安全
HashMap                      可以null        可以null       AbstractMap    线程不安全

合理利用集合的有序性(sort)和稳定性(order),避免集合的无序性(unsort)和不稳定性(unorder)带来的负面影响
有序性指遍历的结果按某种比较规则依次排列.稳定性指每次遍历的元素次序是一定的.
ArrarList(order/sort) HashMap(unorder/unsort) TreeSet(order/sort)

利用Set元素唯一的特性,可以快速对一个集合进行去重操作,避免使用List的contains方法进行遍历,对比,去重操作
 

 

猜你喜欢

转载自blog.csdn.net/qq_38005943/article/details/81977257