Java泛型与集合操作详解

需积分: 43 4 下载量 92 浏览量 更新于2024-07-20 1 收藏 4.77MB PPT 举报
本资源主要涵盖了Java集合框架的相关内容,包括数组、泛型、Box类的使用以及迭代器和集合容器的基本操作。以下是对这些知识点的详细解析: 1. 引用类型与实际存储类型:Java中的数组引用类型(如`Animal[]`)实际上在内存中存储的是具体类型的实例,如`Dog[]`。若尝试将不匹配类型的对象(如将Dog对象放入Animal数组)添加到数组中,会在编译阶段抛出类型不匹配的异常。这体现了Java编译器的类型安全特性。 2. 泛型与类型擦除:Java的泛型是一种强类型机制,但仅限于编译时。在运行时,类型参数被擦除为`Object`类型,这意味着虽然`Box<Dog>`和`Box<Animal>`在声明时看似不同,但在实际执行中它们都被视为`Box<Object>`。这强调了泛型在代码组织上的优势,但牺牲了一部分运行时的类型信息。 3. `Box`类和类型参数的动态性:`Box<T>`是一个泛型类,它允许我们在运行时动态地设置和获取类型`T`的值。例如,通过`dogBox.setT(newDog("狗狗"))`,编译器确保了方法参数的合法性,并在运行时可以正确地获取和操作Dog对象。 4. 数组扩容与元素赋值:`Test5<T>`类中的`setO()`方法用于动态扩展数组并插入元素,它通过判断数组长度并创建新数组来实现。这种方法确保了在添加元素时不会超出数组容量,同时保持了类型的安全性。 5. 使用`foreach`遍历:实现了`java.lang.Iterable<T>`接口的类可以方便地通过`foreach`循环进行遍历,这对于处理集合数据非常实用。例如,`List<Student>`集合可以用`list.forEach(stud -> System.out.println(stud.getName()))`的形式遍历学生对象。 6. 自定义排序:在使用集合时,如果需要按照特定规则排序,可以提供一个实现了`Comparator`接口的自定义比较器,如`Comparator<String>`。在本例中,`Collator.getInstance(java.util.Locale.CHINA)`用于获取一个按照中文拼音排序的比较器,然后用于对`Set<String>`进行排序。 总结来说,该资源着重介绍了Java集合框架的关键概念,包括数组、泛型的使用、动态类型和类型擦除,以及如何利用`Iterable`接口和自定义排序。理解这些内容对于编写高效、类型安全的Java代码至关重要。