如题,代码如下
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable {
/**
* The hash table data.
*/
private transient Entry<?,?>[] table;
他这里的Entry<?,?>是什么写法?既然保存的是键值对,应该和Hashtable的参数类型一样也是<K,V>才对,为啥用两个问号呢?
在 Hashtable 中,Entry<?,?> 是一种泛型写法,表示 Entry 是一种可以保存键值对的数据结构。
使用两个问号(?)表示 Entry 中保存的键和值的类型是不确定的。这意味着 Entry 可以保存任意类型的键和值,无论它们是什么类型。
这种写法通常用于定义泛型类型的成员变量或方法的返回值,用来表示可以接受任意类型的数据。
例如,在 Hashtable 中,Entry<?,?> 表示 Hashtable 内部使用的数据结构,用来保存键值对。但是,由于 Hashtable 的键和值的类型是不确定的,所以使用 Entry<?,?> 来保存数据可以让 Hashtable 可以接受任意类型的键和值。
例如,下面的代码展示了如何使用 Hashtable 存储字符串和整数类型的键值对:
在这个例子中,Hashtable 内部使用的 Entry<?,?> 数据结构保存了字符串和整数类型的键值对。