阿里巴巴 Java 开发手册--集合学习笔记

来源:互联网 发布:烈焰战车10级升级数据 编辑:程序博客网 时间:2024/06/05 17:00

一、集合处理

1【强制】 ArrayList 的 subList 结果不可强转成 ArrayList ,否则会抛出 ClassCastException
异常: java . util . RandomAccessSubList cannot be cast to java . util . ArrayList ;
说明: subList 返回的是  ArrayList 的内部类  SubList ,并不是  ArrayList ,而是
ArrayList 的一个视图,对于 SubList 子列表的所有操作最终会反映到原列表上。

2、【强制】使用集合转数组的方法,必须使用集合的 toArray(T[] array) ,传入的是类型完全
一样的数组,大小就是 list . size() 。
反例:直接使用 toArray 无参方法存在问题,此方法返回值只能是 Object[] 类,若强转其它
类型数组将出现 ClassCastException 错误。

正例:List<String> list = new ArrayList<String>(2);list.add("guan");list.add("bao");String[] array = new String[list.size()];array = list.toArray(array);
3、【强制】使用工具类 Arrays . asList() 把数组转换成集合时,不能使用其修改集合相关的方
法,它的 add / remove / clear 方法会抛出 UnsupportedOperationException 异常。
说明: asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。 Arrays . asList
体现的是适配器模式,只是转换接口,后台的数据仍是数组。
String[] str = new String[] { "a", "b" };
List list = Arrays.asList(str);
第一种情况: list.add("c");  运行时异常。
第二种情况: str[0]= "gujin"; 那么 list.get(0) 也会随之修改。

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

正例:Iterator<String> it = a.iterator();while(it.hasNext()){String temp = it.next();if(删除元素的条件){it.remove();}}
5、【推荐】使用 entrySet 遍历 Map 类集合 KV ,而不是 keySet 方式进行遍历

正例: values() 返回的是 V 值集合,是一个 list 集合对象 ;keySet() 返回的是 K 值集合,是
一个 Set 集合对象 ;entrySet() 返回的是 K - V 值组合集合。

0 0
原创粉丝点击