java集合详解(集合与其它数据结构体之间的转换)——全网最通俗易懂的讲解
一、码出高效:
集合是开发中需要修改最多的地方,如:从数据库中取出多条数据是 List 结构,然后需要在 Service 进行层层处理,最终为前端展示提供 vo 对象,所以,很多集合使用的规范一定要弄明白。
代码的字里行间流淌的是软件系统的血液,质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。
1.【强制】ArrayList 的 subList 结果不可强转成 ArrayList,否则会抛出 ClassCastException 异常;
说明:subList 返回的是 ArrayList 的内部类 SubList,并不是 ArrayList 而是 ArrayList的一个视图,对于 SubList 子列表的所有操作最终会反映到原列表上。
2.【强制】ArrayList 的 subList 场景中,高度注意对原集合元素的增加或删除,均会导致子列表的遍历、增加、删除产生 ConcurrentModificationException 异常;
说明:subList 返回的是 ArrayList 的内部类 SubList,并不是 ArrayList 而是 ArrayList 的一个视图,对于 SubList 子列表的所有操作最终会反映到原列表上。
3.【强制】使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一样的数组,大小就是 list.size();
说明:使用 toArray 带参方法,入参分配的数组空间不够大时,toArray 方法内部将重新分配内存空间,并返回新数组地址。
如果数组元素个数大于实际所需,下标为[ list.size() ]的数组元素将被置为 null,其它数组元素保持原值,因此最好将方法入参数组大小定义与集合元素个数一致;
而直接使用 toArray 无参方法存在问题,此方法返回值只能是 Object[]类,若强转其它类型数组将出现 ClassCastException 错误。
4. 【强制】使用工具类 Arrays.asList() 把数组转换成集合时,不能使用其修改集合相关的方法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常;
说明:Arrays.asList() 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。Arrays.asList() 体现的是适配器模式,只是转换接口,后台的数据仍是数组。
如果强行改变,如:list.add(“new”) 新元素,会抛出异常;
如果改变数组元素,集合元素也会改变,如:str[0] = “change”,那么 list.get(0)也会随之修改。
5. 【强制】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator(迭代器)方式,如果是并发操作,需要对 Iterator 的对象加锁。
说明:for循环内,如果在直接使用 remove/add 操作,将对原集合的操作,势必改变集合结构,该结构的改变势必影响新一轮的遍历。
List.toArray()用法详解----ArrayList转化为一个String数组
ArrayList直接转化为一个String数组
如果要把一个List直接转化为Object数组,则可以直接使用Object[] o = list.toArray();
如果要转化为String数组,则有以下两种方式:
方法一、String[] arr = new String[list.size]; list.toArray(arr);//此时arr就有了list中的值了
方法二、String[] arr = (String[])list.toArray(new String[0]);
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!