Java泛型与Set集合深度解析

需积分: 0 0 下载量 31 浏览量 更新于2024-08-04 收藏 17KB MD 举报
"集合02.md" 在Java编程中,集合是存储多个对象的主要工具,而泛型和Set集合是其中的重要概念。本文件主要介绍了泛型和Set集合的使用,特别是TreeSet集合的特点和应用。 ### 1. 泛型 泛型是Java 5引入的一个关键特性,它的主要目的是提供编译时的类型安全检测,从而在代码执行前就能发现潜在的类型错误。泛型的好处包括: 1. **类型安全**:它确保集合中存储的元素类型与声明的类型一致,避免了运行时可能发生的ClassCastException。 2. **自动类型转换**:由于在编译阶段就确定了集合元素的类型,因此免除了在操作集合元素时的手动类型转换。 泛型的定义格式通常如下: - `<类型>`:表示指定一种类型的格式,如 `<E>`, `<T>` 等,这里的 `E`, `T` 是常见的占位符,代表“Element”或“Type”。 - `<类型1, 类型2…>`:表示指定多种类型的格式,如 `<E, T>` 或 `<K, V>`,用于表示键值对等复合类型。 ### 2. Set集合 Set集合是一个不允许存储重复元素的数据结构,它没有索引,因此不能像List那样通过索引进行遍历。Set接口的实现类包括HashSet、LinkedHashSet和TreeSet等。 #### 2.1 Set集合概述和特点 - **不重复性**:Set集合中的元素都是唯一的,不允许重复。 - **无序性**:虽然元素在集合中的顺序不是固定的,但在某些实现(如LinkedHashSet)中可以保持插入顺序。 #### 2.2 Set集合的使用 示例代码展示了如何创建一个TreeSet集合,并添加字符串元素,然后通过迭代器和增强for循环遍历集合: ```java Set<String> set = new TreeSet<>(); set.add("ccc"); set.add("aaa"); set.add("aaa"); // 不会添加重复元素 set.add("bbb"); // 使用迭代器遍历 Iterator<String> it = set.iterator(); while (it.hasNext()) { String s = it.next(); System.out.println(s); } System.out.println("-----------------------------------"); // 使用增强for循环遍历 for (String s : set) { System.out.println(s); } ``` ### 3. TreeSet集合 TreeSet是Set接口的一个实现,它除了具有Set的基本特性外,还有以下特点: - **排序**:TreeSet内部维护了一个红黑树结构,可以对元素进行排序。默认情况下,元素按照它们的自然顺序排序(实现了Comparable接口的元素),也可以自定义排序规则(通过传入Comparator)。 #### 3.1 TreeSet集合概述和特点 - **不可存储重复元素**:与Set集合一样,不允许存储重复的元素。 - **无索引**:同样没有索引,遍历只能通过迭代器或者增强for循环完成。 - **排序能力**:提供自动排序功能,可以是自然排序或根据自定义比较器进行排序。 #### 3.2 TreeSet集合基本使用 以下代码创建了一个TreeSet,存储Integer类型的整数,并进行遍历: ```java TreeSet<Integer> treeSet = new TreeSet<>(); treeSet.add(3); treeSet.add(1); treeSet.add(5); treeSet.add(1); // 不会添加重复元素 // 自然排序,从小到大 for (Integer i : treeSet) { System.out.println(i); } ``` 通过以上介绍,我们可以了解到泛型提高了代码的安全性和可读性,而Set集合尤其是TreeSet提供了存储无序、不重复元素的功能,并支持自动排序,这在实际开发中有着广泛的应用。