1.关于hashCode和equals方法处理原则
1)只要重写equals,就必须重写hashCode
2)set存储的对象必须重写hashCode和equals方法
3)自定义对象作为Map的键,必须重写hashCode和equals方法
4)String重写了hashCode和equals方法。所以直接使用String对象作为key使用
2.ArrayList的subList结果不可强转出ArrayList,例如ArrayList<String> rl=(ArrayList)list.subList(0, 1);
否则抛异常java.lang.ClassCastException: java.util.ArrayList$SubList cannot be cast to java.util.ArrayList
返回的是ArrayList的内部类SubList它是ArrayList的一个视图,对SubList子列表的所有操作最终会反应到原列表上。
3.高度注意对原集合元素个数修改,会导致子列表的遍历,增,删的抛出的异常。
4.集合转数组的方法必须使用集合的toArray(T[] array),
如果使用toArray()返回Object[]类,强转时出现错误例如:String[] array = new Stirng[list.size()];
array=list.toArray(array)
5.工具类
String[] sarray = new String[]{"YOSD","SDFDS"}; List alist =Arrays.asList(sarray); 不能使用修改集合方法
1)alist.add("dsf");出现异常Exception in thread "main" java.lang.UnsupportedOperationException
此方法体现适配器模式,是转化接口,后台数据还是数组。
2) sarray[0]="chia",list,get(0)所之改变
6 泛型通配符<? extends T>来接收返回的数据,此泛型集合不能使用add方法 使用频繁往外读取内容。
泛型通配符<? super T> 不能使用get方法,接口调用赋值时易出错。 适合经常往里插入
7.不要在foreach循环里进行元素remove/add操作,请使用Iterator方式
8.Compatator满足三个条件
1)x,y比较结果和y,x比较结果相反
2)x>y , y>z 则 x>z
3) x=y
JDK7+ Array/Collections的sort才可以使用。
9.集合初始化时,指定集合初始值大小
无法确认时 为16 否则是 (存储元素个数/负载因子)+1,可以提高性能
10.推荐使用entrySet遍历Map类集合KV,效率高,遍历一遍
而keySet方式遍历两遍
JDK8,使用Map.foreach方法
11 图片
12 有序性sort 指遍历结果是按照某种比较规则依次排列的
稳定性stability 集合每次遍历的元素次序一定
ArrayList 是stability/unsort
HashMap是unstability/unsort
TreeMap是stability/sort
13 利用Set元素唯一特性,快速对集合元素去重操作