📅  最后修改于: 2023-12-03 14:43:01.697000             🧑  作者: Mango
在 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 泛型可以使我们在使用映射时更加类型安全,同时还可以限制键值对的类型。在使用映射时,通常会使用泛型类型参数来指定键和值的类型,有时候也会使用泛型的通配符或限定来实现更多的功能。