ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

0525泰山版java开发手册

2020-05-25 17:08:18  阅读:276  来源: 互联网

标签:java 0525 list 手册 add result 使用 集合 size


六.集合处理

  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对象加锁(操作系统)

在增强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方式进行遍历




  

标签:java,0525,list,手册,add,result,使用,集合,size
来源: https://www.cnblogs.com/aLin002/p/12956582.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有