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