Java容器类梳理
一、核心分类:Collection和Map的区别
-
Collection接口:存储的是单个对象的集合,比如一组String、一组User对象,是“单列集合”。常见的实现类有ArrayList、LinkedList、HashSet等。
-
Map接口:存储的是键值对(key-value),比如“学号-学生”“姓名-年龄”,是“双列集合”。常见的实现类有HashMap、HashTable、TreeMap等。
简单理解:Collection是“装单个东西的盒子”,Map是“装成对东西的盒子”,用途完全不同。
二、Collection接口下的常用类
Collection接口有两个主要的子接口:List和Set,两者的核心区别是“是否允许重复元素”。
1. List接口(允许重复元素,有序)
“有序”指的是元素的存储顺序和取出顺序一致,比如按顺序添加A、B、C,取出来还是A、B、C。常用实现类有两个:ArrayList和LinkedList
(1)ArrayList(最常用)
核心特点:底层是数组实现的,查询速度快,增删速度慢(尤其是中间位置的增删)。
适用场景:日常开发中,大部分场景都是“查询多、增删少”,比如展示列表数据、存储固定数量的对象集合,优先用ArrayList。
(2)LinkedList
核心特点:底层是链表实现的,查询速度慢,增删速度快(尤其是中间位置的增删)。
适用场景:需要频繁对集合中间位置进行增删操作的场景,比如实现队列、栈,或者频繁插入数据的业务。
2. Set接口(不允许重复元素,无序)
“无序”指的是元素的存储顺序和取出顺序不一定一致,而且不能有重复元素(如果添加重复元素,会自动去重)。常用实现类:HashSet(最常用)、TreeSet。
(1)HashSet(最常用)
核心特点:底层基于哈希表实现,去重+无序,查询和增删速度都比较快。
适用场景:需要去重的场景,比如存储用户ID、手机号,避免重复数据。
(2)TreeSet
核心特点:不允许重复,并且会对元素进行自动排序(默认升序)。
适用场景:需要去重且需要排序的场景,比如存储成绩、年龄,自动按顺序排列。
三、Map接口下的常用类
Map接口存储的是键值对,key不能重复(重复添加会覆盖原来的value),value可以重复。
1. HashMap(最常用)
核心特点:底层基于哈希表实现,key无序、允许key为null,查询和增删速度快,线程不安全。
适用场景:日常开发中最常用的Map,比如存储用户信息(key为用户ID,value为用户对象)、配置参数等,大部分场景下优先用HashMap。
2. HashTable
核心特点:底层也是哈希表实现,key无序、不允许key为null,线程安全,查询和增删速度比HashMap慢。
适用场景:需要线程安全的场景(但现在开发中,更推荐用ConcurrentHashMap,这个后续有机会再梳理,入门阶段先记住HashTable的特点即可)。
区别:HashMap和HashTable的核心区别就是“是否允许null”和“是否线程安全”
3. TreeMap
核心特点:key不允许重复,会对key进行自动排序(默认升序),不允许key为null。
适用场景:需要对key进行排序的键值对场景,比如存储成绩排名(key为成绩,value为学生姓名),自动按成绩升序排列。
更多推荐
所有评论(0)