记一次List集合存入(null)空元素

1 问题原因

误将空元素null值存入到了List集合中,导致后续的调用中出现了空指针。 后续修改使用Stream过滤掉了空元素。

2 集合特性

Java容器分为Collection和Map两大类,Collection集合的子接口有Set、List、Queue三种子接口。我们比较常用的是Set、List,Map接口不是collection的子接口。

Collection集合主要有List和Set两大接口
●List:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多个nul元索,元索都有索引。常用的实现类有ArrayList
LinkedList 和 Vector。
●Set:一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素,只允许存入一个nul元素,必须保证元素唯一性。Set接口常用实现类是HashSet、LinkedHashSet 以及TreeSet。

Map是一个键值对集合,存储键、值和之间的映射。Key无序,唯一;value不要求有序,允许重复。Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。
Map 的常用实现类:HashMap、TreeMap、HashTable、LinkedHashMap、ConcurrentHashMap

HashMap、TreeMap、HashTable、LinkedHashMap 和 ConcurrentHashMap 都是 Java 中常见的集合类。它们的特性和用法如下:

1、HashMap:HashMap 是一种无序的、基于哈希表实现的 Map 接口的实现类。它可以存储键值对,其中键和值都可以为 null。由于哈希表的原理,HashMap 具有很快的插入、删除和查找速度,但是它的顺序是不确定的。

2、TreeMap:TreeMap 是一种有序的、基于红黑树实现的 Map 接口的实现类。它可以存储键值对,其中键不能为 null,值可以为 null。由于红黑树的原理,TreeMap 中的键值对是按照键的自然排序或者自定义排序规则进行排序的。

3、HashTable:HashTable 是一种线程安全的、基于哈希表实现的 Map 接口的实现类。它可以存储键值对,其中键和值都不能为 null。由于它的线程安全特性,HashTable 的操作速度相对较慢。

4、LinkedHashMap:LinkedHashMap 是一种有序的、基于哈希表和双向链表实现的 Map 接口的实现类。它可以存储键值对,其中键和值都可以为 null。由于双向链表的原理,LinkedHashMap 中的键值对可以按照插入顺序或者访问顺序进行排序。

5、ConcurrentHashMap:ConcurrentHashMap 是一种线程安全的、基于分段锁实现的 Map 接口的实现类。它可以存储键值对,其中键和值都不能为 null。由于分段锁的原理,ConcurrentHashMap 的并发性能很好,可以支持多个线程同时进行读写操作。

以上集合类的特性均实现了 Java 的 Map 接口,可以存储键值对并提供快速的查找、插入和删除操作。它们之间的区别主要在于线程安全、有序性、速度和可用性等方面。根据实际的业务需求和性能要求,可以选择适当的集合类进行使用。

posted @ 2022-11-26 14:58  藤原绿海bluestraggle  阅读(352)  评论(0编辑  收藏  举报