集合遍历
目录
Java集合泛型是Java SE 1.5(Java 5)中引入的一个重要特性,它允许在定义类、接口和方法时指定一个或多个类型参数。这些类型参数在实例化或调用时会被具体的类型所替换,从而提供类型安全并减少类型转换的需要。以下是对Java集合泛型的详细解释:
泛型的基本概念
- 定义:泛型(Generics)是参数化类型的一种应用,它将类型参数化,使得代码可以应用于多种类型。
- 目的:提高代码的重用性、安全性和可读性,减少类型转换的错误。
泛型的好处
- 类型安全:在编译时期即可检查类型错误,避免运行时出现
ClassCastException
。 - 消除强制类型转换:在使用泛型后,可以在编译时期自动进行类型转换,无需手动进行。
- 提高代码复用性:通过类型参数化,可以编写更加通用的代码,适应不同的数据类型。
泛型的使用
1. 泛型类
在类名后添加一对尖括号,并在尖括号中填写类型参数。例如:
public class GenericClass<T> {
private T value;
public GenericClass(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
2. 泛型接口
泛型接口的定义与泛型类类似,也是在接口名后添加类型参数。例如:
public interface GenericInterface<T> {
void show(T value);
}
3. 泛型方法
泛型方法可以定义在泛型类或普通类中。在方法返回类型前添加尖括号和类型参数。例如:
public class GenericMethods {
public static <T> void printArray(T[] inputArray) {
for (T element : inputArray) {
System.out.printf("%s ", element);
}
System.out.println();
}
}
Java集合框架中的泛型
Java集合框架(Java Collections Framework)提供了丰富的接口和类来实现对数据的存储和操作。在Java 5之后,这些接口和类都支持泛型,使得它们可以存储和操作特定类型的对象。
- List:一个有序集合,允许元素重复。主要实现类有
ArrayList
和LinkedList
。 - Set:一个无序集合,不允许元素重复。主要实现类有
HashSet
、LinkedHashSet
和TreeSet
。 - Map:一个将键映射到值的对象,一个键可以映射到最多一个值。主要实现类有
HashMap
、TreeMap
和LinkedHashMap
。
使用泛型集合可以确保集合中元素的类型安全,例如:
List<String> stringList = new ArrayList<>();
stringList.add("Hello");
// stringList.add(123); // 编译错误,因为集合类型已指定为String
Set<Integer> integerSet = new HashSet<>();
integerSet.add(1);
// integerSet.add("Hello"); // 编译错误,因为集合类型已指定为Integer
泛型通配符
在Java中,还可以使用泛型通配符(Wildcard)来表示未知的类型。主要有两种形式:
?
:表示未知的类型,只能用于读取数据,不能用于写入数据。? extends T
:表示未知的类型,但它是T或T的子类。只能用于读取数据,不能用于写入数据。? super T
:表示未知的类型,但它是T或T的父类。可以用于写入数据,但读取的数据类型只能是T或T的父类类型。