📜  Java泛型-映射(1)

📅  最后修改于: 2023-12-03 14:43:01.697000             🧑  作者: Mango

Java泛型-映射

在 Java 中,我们通常会使用映射(Map)来存储一组键值对,它可以用于解决很多问题,但是在使用时需要注意键和值类型的匹配问题。

Java 泛型解决了这个问题,我们可以使用泛型来指定映射中键和值的类型,并且还可以在使用时进行类型安全的检查。

映射的使用

Java 中常用的映射类有 HashMap、TreeMap 和 LinkedHashMap 等,在使用时我们需要先指定键和值的类型,例如:

Map<String, Integer> map = new HashMap<>();

上面的代码创建了一个存储 String 类型的键和 Integer 类型的值的 HashMap。

下面是映射的一些常用方法:

  • put(K key, V value):将键值对放入映射中。
  • get(Object key):返回与指定键对应的值,如果不存在则返回 null。
  • containsKey(Object key):检查映射中是否包含指定键。
  • containsValue(Object value):检查映射中是否包含指定值。
  • remove(Object key):从映射中移除指定键对应的键值对。
  • clear():清空映射中的所有键值对。
  • size():返回映射中的键值对数量。
泛型的类型参数

在映射中,我们需要使用泛型类型参数来指定键和值的类型,以确保类型匹配的安全性。

例如,下面是使用泛型类型参数创建 HashMap 的示例:

Map<String, Integer> map = new HashMap<>();

在上面的示例中,String 为键的类型,Integer 为值的类型。

泛型的通配符

在使用泛型时,有时候我们需要指定一个范围,而不是具体的类型。这时,可以使用泛型的通配符来实现。

例如,下面是指定只接受实现了 Comparable 接口的键类型的 TreeMap 的示例:

Map<? extends Comparable, Integer> map = new TreeMap<>();

在上面的示例中,? extends Comparable 表示接受所有实现了 Comparable 接口的键类型,而不是具体的类型。

泛型的限定

在使用泛型时,有时候我们需要限定某个类型必须符合一定的条件。这时,可以使用泛型的限定来实现。

例如,下面是限定键类型必须是 Number 类型的 HashMap 的示例:

Map<K extends Number, V> map = new HashMap<>();

在上面的示例中,K extends Number 表示键的类型必须是 Number 类型或其子类,而不是任意类型。

总结

Java 泛型可以使我们在使用映射时更加类型安全,同时还可以限制键值对的类型。在使用映射时,通常会使用泛型类型参数来指定键和值的类型,有时候也会使用泛型的通配符或限定来实现更多的功能。