1. 集合框架概述
Java集合框架是Java语言中用于存储和操作对象组的标准架构。它位于java.util包中,提供了一套统一的接口和实现类,用于处理各种数据结构。
核心接口层次:
Collection:所有集合类的根接口List:有序、可重复的集合Set:无序、不可重复的集合Queue:队列,先进先出
Map:键值对映射,不属于Collection接口体系
2. 常用集合类
List接口实现
- ArrayList:基于动态数组,随机访问快,增删慢
- LinkedList:基于双向链表,增删快,随机访问慢
- Vector:线程安全的动态数组(已过时)
Set接口实现
- HashSet:基于哈希表,无序,查询快
- LinkedHashSet:保持插入顺序的HashSet
- TreeSet:基于红黑树,有序集合
Map接口实现
- HashMap:基于哈希表,键值对存储
- LinkedHashMap:保持插入顺序的HashMap
- TreeMap:基于红黑树,按键排序
- Hashtable:线程安全的Map(已过时)
3. 泛型基础
泛型是Java 5引入的重要特性,用于在编译时提供类型安全检查。
泛型类定义
publicclassBox<T>{privateTcontent;publicvoidsetContent(Tcontent){this.content=content;}publicTgetContent(){returncontent;}}泛型方法
publicclassUtils{publicstatic<T>TgetFirst(List<T>list){returnlist.get(0);}}类型通配符
<?>:无界通配符,表示任意类型<? extends T>:上界通配符,表示T或其子类<? super T>:下界通配符,表示T或其父类
4. 集合与泛型结合使用
类型安全的集合
// 不使用泛型(编译时无类型检查)Listlist=newArrayList();list.add("hello");Strings=(String)list.get(0);// 需要强制类型转换// 使用泛型(编译时类型安全)List<String>genericList=newArrayList<>();genericList.add("hello");Strings=genericList.get(0);// 无需强制转换泛型集合遍历
// 传统for循环for(inti=0;i<list.size();i++){Stringitem=list.get(i);}// 增强for循环for(Stringitem:list){System.out.println(item);}// 迭代器Iterator<String>iterator=list.iterator();while(iterator.hasNext()){Stringitem=iterator.next();}// Java 8+ Stream APIlist.stream().forEach(item->System.out.println(item));5. 最佳实践
集合选择指南
- 需要快速随机访问→ ArrayList
- 频繁增删操作→ LinkedList
- 需要去重→ HashSet
- 需要排序→ TreeSet/TreeMap
- 需要线程安全→ ConcurrentHashMap/CopyOnWriteArrayList
泛型使用建议
- 尽量使用泛型集合,避免原始类型
- 优先使用
List<String>而不是List - 在API设计中合理使用通配符
- 避免在运行时获取泛型类型信息
性能注意事项
- ArrayList初始容量设为预估大小,避免频繁扩容
- HashMap设置合适的初始容量和负载因子
- 遍历大集合时考虑使用迭代器而非get(index)
- 注意集合的线程安全性需求
6. 常见问题
类型擦除
Java泛型在编译后会进行类型擦除,所有泛型类型参数都会被替换为它们的边界类型(通常是Object)。
// 编译前List<String>list=newArrayList<>();// 编译后(类型擦除)Listlist=newArrayList();不能创建泛型数组
// 错误:不能创建泛型数组T[]array=newT[10];// 正确:使用ArrayList代替List<T>list=newArrayList<>();泛型与继承
// List<String>不是List<Object>的子类List<String>strings=newArrayList<>();// List<Object> objects = strings; // 编译错误7. 总结
Java集合框架与泛型的结合为开发者提供了类型安全、高效的数据结构解决方案。掌握核心集合类的特性和适用场景,合理使用泛型进行类型约束,能够显著提升代码的质量和可维护性。
关键要点:
- 根据需求选择合适的集合实现
- 始终使用泛型保证类型安全
- 理解类型擦除的影响
- 遵循最佳实践提升性能
随着Java版本的更新,集合框架也在不断演进(如Java 8的Stream API、Java 9的工厂方法等),建议持续关注新特性以编写更现代化的代码。