集合类中的反常规特性

世界上所有程序只在做一件事情:处理数据。而数据是需要结构来承载,数据结构由此而来,常见的数据结构包括 List、Set、Map、Queue、Tree、Graph、Stack 等,其中 List、Set、Map、Queue 可以从广义上统称为集合类数据结构。

高级编程语言一般都会提供各种数据结构的实现,供我们开箱即用。Java 也是一样,比如提供了集合类的各种实现。Java 的集合类包括 Map 和 Collection 两大类。Collection 包括 List、Set 和 Queue 三个小类,其中 List 列表集合是最重要也是所有业务代码都会用到的。所以,今天我会重点介绍 List 的内容,而不会集中介绍 Map 以及 Collection 中其他小类的坑。

一、Arrays.asList 把数据转换为 List 的三个特性

1、不能直接使用 Arrays.asList 来转换基本类型数组

2、Arrays.asList 返回的 List 不支持增删操作

3、对原始数组的修改会影响到我们获得的那个 List

二、使用 List.subList 进行切片操作可能会导致 OOM

subList()返回的是 ArrayList 的内部类 SubList,并不是 ArrayList 本身,而是 ArrayList 的一个视

图,对于 SubList 的所有操作最终会反映到原列表上。所以如果有很多大数据,但是最后只使用subList()返回一个小视图使用,是有可能导致大数组无法回收而产生OOM。

猜你喜欢

转载自blog.csdn.net/tales522/article/details/133605722