重要实现类
HashMap:上一篇文章,描述内容一致.待贴
HashTable:存储数据的方式和HashMap一致,线程安全.
LinkedHashMap: 存储数据的方式和HashMap一致,同时维护一个键的链表,保存键的新增结构.次实现类可以保证存入的键值对,新增顺序和存储顺序一致.
TreeMap:使用红黑树方式存储键值对.
泛型
1.泛型在集合中的应用:
泛型本身没有多态,必须要求左右两端类型一致.
List<String> list = new ArrayList<>();/推荐使用
List<String> list = new ArrayList();/不推荐使用
List<String> list = new ArrayList<String>();//标准形式
list.add(String); //泛型的添加元素方法,必须是和泛型类型一致,
String s = list.get(o);//直接返回泛型规定类型,不需要强转
Set<String> set = new HashSet<>();
set.add(String);
Map<String,String> map = new HashMap<>();
map.put(String,String);
String s = map.get(String);
2,泛型在类声明中的引用
Public class<T> Person{
public T data;//使用泛型声明类的属性
public T methodOne(){//声明方法的返回方法
}
public void methodTwo(T t){声明方法的参数
}
}
//确定泛型具体类型的时机,泛型的具体类型如果不确定,则默认使用object
public class TestOne{
public static void main(String[] args){
Person<String> person = new Person();//在创建对象时指定泛型的具体类型
//泛型的具体类型一旦指定,name在该类中所有泛型都直接变成指定的类型.
person.methodTwo("helo");
String s = person.methodOne();
person.data = "nihao";
}
}
//在继承状态下确定泛型的具体时机
public class Teacher extends Person<String>{//在子类继承父类时确定泛型的具体类型.子类继承到的父类的泛型变成指定类型.
}
public class Teacher<T> extends Person<T> {//在子类继承父类时子类继承父类的泛型,子类变成泛型类,此时需要在创建子类对象时指定泛型的具体类型
}
public class Teacher extends Person{
//子类继承泛型父类时,没有指定泛型的具体类型时,子类也没有泛型.此时从父类继承到的泛型默认使用object
}
3.泛型在接口中的应用
public interface Person<T>{
public T methodOne();//使用泛型作为方法的返回类型
public void methodTwo(T t);// 使用泛型作为方法的参数类型
}
//确定泛型的具体时机
public class Teacher implements Person<String>{
//在实现类实现接口是指具体泛型类型,此时类不是泛型的,接口中的泛型类型直接指定为具体类型
}
public class Teacher<T> implement Person<>T>{//实现类实现接口是继承接口的泛型,此时实现类也是泛型的,确定泛型的具体时机是创建实现类对象时
}
//在接口继承接口时确定泛型的具体类型
public interface Chinese extends Person<String>{// 子接口继承父接口时,测试子接口不是泛型的
}
public interface Chinese<T> extends Person<T>{// 子接口继承父类接口时继承父类接口的泛型,测试子接口也是泛型的,需要子接口的实现类实现子接口时确定泛型的具体类型
4.泛型的通配和上下限
public classTestOne{
Public void methodONe (Collection<?> col){
//?是通配泛型,这个写法可以使任何一个
//未完成,待完善
}
}