码迷,mamicode.com
首页 > 编程语言 > 详细

0525泰山版java开发手册

时间:2020-05-25 17:23:15      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:图片   mamicode   动态创建   直接   idt   strong   png   one   导致   

六.集合处理

  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

subListList的操作都会反映到彼此上,所以需要尤其注意对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对象加锁(操作系统)

在增强for循环中,集合遍历是通过iterator进行的,但是元素的add/remove却是直接使用的集合类自己的方法。这就导致iterator在遍历的时候,会发现有一个元素在自己不知不觉的情况下就被删除/添加了,就会抛出一个异常,用来提示用户,可能发生了并发修改。
  14.在 JDK7 版本及以上,Comparator 实现类要满足如下三个条件,不然 Arrays.sort,Collections.sort 会抛 IllegalArgumentException 异常。

三个条件如下
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开发手册

标签:图片   mamicode   动态创建   直接   idt   strong   png   one   导致   

原文地址:https://www.cnblogs.com/aLin002/p/12956582.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!