一、map
Map
Hashtable HashMap 1.键值对 2.没有迭代顺序 SortedMap
Properties LinkedHashMap 带有迭代顺序的HashMap NavigableMap
TreeMap
2.HashMap
key value
键和值一一对应
HashMap使用hashcode()和equals()判断是否为同一个key,如果hashCode()和equals()都相等,是同一个key
替换原则:当key相同时,key不变value覆盖,
3.LinkedHashMap
带有迭代顺序的HashMap
4.Hashtable和HashMap的区别
Hashtable在早期的API jdk1.0就有了
1. Hashtable 是线程安全版本的HashMap
2. Hashtable 的key 和value都不允许为null
HashMap 可以由一个null 的key 和 多个null的value
5.TreeMap
可以排序的Map,按照key排序
TreeMap如何判断是同一个key,使用compareTo()进行判断,如果compareTo()为0,认为是同一个key
第二个key 不变 value覆盖
6.HashSet的实质
底层就是HashMap,把放到set里面的元素放到map的key中,而map的Value用一个静态常量补存。
Set<DVD> set = new HashSet<DVD>();
set.add(dvd1);
map.put(dvd1,obj);
public class HashSet<Object>{
private static final Object obj = new Object();
Map<DVD,Object> map = new HashMap<DVD,Object>();
public boolean add(Object e) {
return map.put(e, PRESENT)==null;
}
}
7.泛型
为什么要使用泛型?
对类的属性进行修改时,使用object虽然能满足要求,但还是不能不安全的,这种错误在编译的时候发现不了,只有在运行的时候才能暴露出来,所以要引入泛型
泛型的作用:
1.编译的时候,可以帮我们检查具体的类型是不是正确的,如果类型不一样,编译报错,提高了程序的健壮性
2.不需要再向下转型,不会出现classCastException,使程序更加简单
泛型的两点说明:
1.如果使用的时候没有为泛型类型指定类型,还是传入了Object类型,还是会产生异常
2.JDK7.0开始后面的泛型可以不加,可以只加前面的
定义类的时候:类型的形参
方法的形参、实际
Set<String> set = new HashSet<String>();//<String> 实参
8.泛型比object的好处
Object虽然可以添加任何类型,但是不太安全,添加进去以后,会向上转型成Object,取出来的时候需要向下转型,向下转型不安全,可能发生ClassCastException,而且还比较麻烦...
为了保证程序的健壮性和易用性,出现了泛型...
9.关于泛型的注意点:重载时候只判断类型,不判断泛型
10、泛型擦除
把一个带泛型的引用赋值给一个不带泛型的引用 叫做泛型擦除
泛型擦除后,原有的类型会向上转型成Object类型会丢失,转型成object以后,又可以随意的修改类型了,不安全
<?>可以传任意类型 但只能传不能修改
11.泛型的上限和下限
泛型上限:?继承父类 可以在方法和声明参数上使用
泛型下限:?super 类 只能写在方法参数上