电话
400 9058 355
Java集合框架由Collection和Map两条平行主线构成,前者含List、Set、Queue三大分支,后者自成键值对体系;二者无继承关系,仅通过视图桥接。
Java集合框架不是一棵树,而是一张有向接口网——Collection 和 Map 是两条平行主线,彼此不继承,也不实现对方。
Collection 是单列集合的根接口,但它**不能被直接实例化**,所有具体实现都落在它的子接口上:
List:有序、可重复,关注「位置」——ArrayList(数组实现,随机访问快)、LinkedList(链表实现,增删快)、Vector(线程安全但已基本弃用)Set:无序、不可重复,关注「唯一性」——HashSet(哈希表,依赖 hashCode() 和 equals())、TreeSet(红黑树,要求元素可比较或传入 Comparator)、LinkedHashSet(哈希+链表,保持插入顺序)Queue:专为队列操作设计,支持 FIFO 或优先级——LinkedList(同时实现了 Queue)、PriorityQueue(堆实现,非线程安全)、ArrayDeque(双端队列,比 Stack 更推荐)注意:Stack 虽然继承自 Vector,但它属于遗留类,Deque 及其实现(如 ArrayDeque)才是现代替代方案。
Map 是键值对映射的顶层接口,和 Collection 完全无关。它没有继承关系,只有实现类提供「视图」(View)来桥接——比如 map.keySet() 返回一个 Set,map.values() 返回一个 Collection,但这些视图只是代理,修改它们会反映到原 Map 上。
HashMa
p:最常用,非线程安全,允许一个 null 键和多个 null 值TreeMap:按键排序,基于红黑树,要求键实现 Comparable 或传入 Comparator
LinkedHashMap:按插入/访问顺序维护条目,适合 LRU 缓存场景ConcurrentHashMap:高并发场景首选,分段锁(JDK 7)或 CAS + synchronized(JDK 8+),不接受 null 键值Hashtable:老式线程安全实现,方法全加 synchronized,性能差,且不允许 null 键值——已被 ConcurrentHashMap 取代所有 Collection 实现类都必须提供 iterator() 方法,返回一个 Iterator 实例;Map 则通过 keySet()、values()、entrySet() 获取可迭代视图。
增强 for 循环本质就是语法糖,编译后转为 Iterator 调用:
for (String s : list) { ... }
// 等价于
Iterator it = list.iterator();
while (it.hasNext()) {
String s = it.next();
...
}
所以任何类只要实现 Iterable 接口(即提供 iterator() 方法),就能用增强 for 遍历——这解释了为什么 Map 本身不能直接遍历,但它的三个视图可以。
不同实现对 null 的容忍度差异极大,这是运行时 NullPointerException 的高频来源:
ArrayList、LinkedList、HashSet、HashMap 允许 null 元素或键值TreeSet、TreeMap 在遇到 null 键时抛 NullPointerException(因为比较逻辑无法处理 null)ConcurrentHashMap 和 Hashtable 明确禁止 null 键和值,否则在 put() 时就抛异常Arrays.asList() 返回的是固定大小的 List,底层是数组包装,调用 add() 或 remove() 会抛 UnsupportedOperationException
真正写业务代码时,别只看接口名,得盯住具体实现类的行为边界——尤其是 null 处理、线程安全性、是否支持修改操作,这些才是线上出问题的地方。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...