Java中集合泛型的学习

BingBing-8888 / 2024-09-26 / 原文

集合遍历


目录
  • 集合遍历
      • 泛型的基本概念
      • 泛型的好处
      • 泛型的使用
        • 1. 泛型类
        • 2. 泛型接口
        • 3. 泛型方法
      • Java集合框架中的泛型
      • 泛型通配符

Java集合泛型是Java SE 1.5(Java 5)中引入的一个重要特性,它允许在定义类、接口和方法时指定一个或多个类型参数。这些类型参数在实例化或调用时会被具体的类型所替换,从而提供类型安全并减少类型转换的需要。以下是对Java集合泛型的详细解释:

泛型的基本概念

  • 定义:泛型(Generics)是参数化类型的一种应用,它将类型参数化,使得代码可以应用于多种类型。
  • 目的:提高代码的重用性、安全性和可读性,减少类型转换的错误。

泛型的好处

  1. 类型安全:在编译时期即可检查类型错误,避免运行时出现ClassCastException
  2. 消除强制类型转换:在使用泛型后,可以在编译时期自动进行类型转换,无需手动进行。
  3. 提高代码复用性:通过类型参数化,可以编写更加通用的代码,适应不同的数据类型。

泛型的使用

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:一个有序集合,允许元素重复。主要实现类有ArrayListLinkedList
  • Set:一个无序集合,不允许元素重复。主要实现类有HashSetLinkedHashSetTreeSet
  • Map:一个将键映射到值的对象,一个键可以映射到最多一个值。主要实现类有HashMapTreeMapLinkedHashMap

使用泛型集合可以确保集合中元素的类型安全,例如:

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的父类类型。