0525泰山版java开发手册
Posted alin002
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0525泰山版java开发手册相关的知识,希望对你有一定的参考价值。
六.集合处理
4.在使用java.util.stream.Collectors类的toMap()方法转为Map集合时,一定要注意当value为null时会抛NPE异常
NPE:NullPointerException();
5.ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异常
subList指的是返回一个集合的一部分视图LIst<E>.subList<int from,int to) 包含from不包含to
对subList或List的操作都会反映到彼此上,所以需要尤其注意对subList内容和List内容的修改
6.使用Map的方法keySet()/values()/entrySet()返回集合对象时,不可以对其进行添加元素操作,否则会抛出UnsupprotedOperationException异常
keySet():返回所有key值; values():返回所有Value到一个Collection集合; entrySet():返回map中各个key和value的映射关系集合
7.Collections类返回的对象,如:emptyList()/singletonList()等都是immutable list,不可对其进行添加或者删除元素的操作
emptyList():创建一个空的集合,优点是省空间
singletonList():只可以存一个对象的不可变的集合
8.使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型完全一致,长度为0的空数组
public static void main(String[] args) { List<String> list = new ArrayList<>(2); list.add("guan"); list.add("bao"); String[] array = list.toArray(new String[0]); for(String a:array) System.out.println(a); }
使用 toArray 带参方法,数组空间大小的 length,
1) 等于 0,动态创建与 size 相同的数组,性能最好。
2) 大于 0 但小于 size,重新创建大小等于 size 的数组,增加 GC 负担。
3) 等于 size,在高并发情况下,数组创建完成之后,size 正在变大的情况下,负面影响与 2 相同。
4) 大于 size,空间浪费,且在 size 处插入 null 值,存在 NPE 隐患。
9.在使用Collection接口任何实现类的addAll()方法时,都要对输入的几何参数进行NPE判断
result.addAll(list);//把list中的每一个元素加到result中,result.size()==list.size()
result.add(list);//将list作为一个元素加到result中,则result.size()为1
10.使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常
11.泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用add方法,而<? super T>不能使用 get方法,两者在接口调用赋值的场景中容易出错
<? extends T>表示上界,即所有继承T的(包括T)
<? super T>表示下界,即所有是T的父类的(包括T)
第一、频繁往外读取内容的,适合用<? extends T>。
第二、经常往里插入的,适合用<? super T>。
12.在无泛型限制定义的集合赋值给泛型限制的集合时,在使用集合元素时,需要进行instance of 判断,避免抛出ClassCastException异常
13.不要在foreach循环里进行元素的remove/add操作. remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁(操作系统)
三个条件如下
1) x,y 的比较结果和 y,x 的比较结果相反。
2) x>y,y>z,则 x>z。
3) x=y,则 x,z 比较结果和 y,z 比较结果相同。
15.集合初始化时,指定集合初始值大小,HashMap 使用 HashMap(int initialCapacity) 初始化,如果暂时无法确定集合大小,那么指定默认值(16)即可。
1 public class main { 2 public static void main(String[] args) { 3 Map hsmap = new HashMap(16) { 4 { 5 put("1","h"); 6 put("2","e"); 7 put("3","l"); 8 } 9 }; 10 System.out.println(hsmap); 11 } 12 }
16.使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历
以上是关于0525泰山版java开发手册的主要内容,如果未能解决你的问题,请参考以下文章