什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,
早期定义Object来完成扩展,现在定义泛型来完成扩展。
--泛型类定义的泛型,在整个类中有效。如果被方法使用,那么泛型类的对象明确要操作的具体类型后,
所有方法要操作的类型就已经固定了。
为了让不同方法可以操作不同类型,而且类型还不确定。
那么可以将泛型定义在方法上:publi<T> void show(T t)。
特殊之处:静态方法不可以访问类上定义的泛型。如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
泛型的限定:
?extends E:可以接收E类型或者E的子类型。上限。
?通配符。也可以理解为占位符。
?super E:可以接收E类型或者E的父类型。下限。Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
1:添加
----put(K key,V value)
----putAll(Map<? extends K,? extends V> m)
2:删除
----clear()
----remove(Object key) 3:判断
----containsValue(Object obj)
----containsKey(Object key)
----isEmpty()
4:获取
----get(Object key)
----size()
----values()
----entrySet()
----keySet() Map
----Hashtable():底层是哈希表数据结构,不可以存入nu ll键null值。线程同步的。jkd1.0,效率低。
----HashMap():底层是哈希表数据结构,运行使用null键和null值,该集合是不同步的。jdk1.2,效率高。
----TreeMap():底层是二叉树数据结构,线程不同步。可以用于给map集合中的键进行排序。
和set很像,其实,set底层就是使用了Map集合。
map集合的两种取出方式:
1,keyset:将map中所有的键存入到set集合,因为set具备迭代器。
所以可以 迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合,再通过迭代器取出。
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry。
Map.Entry 其实Entry也是一个接口,它是Map接口的一个内部接口。 |