1》泛型迭代器
Iterator<String> iterator;
Iterator<Student> iterator;
2》泛型注意事项
// 1.默认声明一个泛型集合,前后类型要一至
List<Student> list1 = new ArrayList<Student>();
// 2.这样声明前后类型不一至是不可以的
//不可以前面写父类,后面写子类
//List<Object> list2 = new ArrayList<Student>();
// 3.集合泛型的声明,可以只声明前面的泛型,jdk1.7的新特性:菱形泛型,开发时建议还是写成前后一至
//1.6 1.5的jdk不能写菱形泛型
List<Student> list3 = new ArrayList<>();
// 4.集合声明的泛型,代表此类或者子类都可以成为集合的元素,eg: Person -> Student
List<Person> list4 = new ArrayList<Person>();
// 5.声明的泛型类型一定是引用数据类型(类)
//泛型是基本数据类型
//List<int> list6 = new ArrayList<int>();
List<Float> list6 = new ArrayList<Float>();
3》泛型的由来
解决类型转换异常
04》声明泛型类和泛型方法
**
* 掌握:
* 如何声明一个泛型类和方法
*
* 1.声明一个泛型类
* class Tool<T>
*
* 声明泛型方法格式: public 返回类型(T) 方法名(泛型类型T 变量名)
*
* 2.声明一个泛型方法(无返回值,有泛型参数)
* public void print(T t)
* 3.声明一个泛型方法(有返回值,无参数)
* public T get(int index)
* 4.声明一个泛型属性
*
* private T o;
public T getO() {
return o;
}
public void setO(T o) {
this.o = o;
}
*
*/
05》泛型高级之通配符
// 1.泛型通配符<?> 一般在声明变量类型时使用
// 任意类型,如果没有明确,那么就是Object以及任意的Java类了
//打印集合对象
public static void print(List<?> list){
System.out.println(list);
}
// 2.? extends E 【E是父类,?子类】
// 向下限定,E及其子类
/**
* addAll(Collection<? extends Person> c)
* 添加的集合可以是 Person类型【List<Person> list4】,或者是Person的子类【List<Student> list6】
*/
//List<Person> list5 = new ArrayList<Person>();
/**
* addAll(Collection<? extends Student> c)
* 添加的集合可以是 Student类型【List<Student> list6】,或者是Student的子类【List<Person> list4】
*/
List<Student> list5 = new ArrayList<Student>();
// 3.? super E 【?是父类,E子类】- 暂时先不掌握
// 向上限定,E及其父类
06》增强for循环
简体数组和集合遍历
格式:
for(元素数据类型 变量 : 数组或者Collection集合) {
使用变量即可,该变量就是元素
}
int[] arr1 = {120,110,119};
for(int num : arr1){
System.out.println(num);
}
//2.集合
List<String> list = new ArrayList<String>();
list.add("小子");
list.add("孙子");
list.add("老子");
int i = 0;
for(String str : list){
i++;
System.out.println("第" + i + "个元素:" + str);
}
07》Dao
数据访问层
08》泛型Dao接口
09》三种迭代能否删除元素
普通for循环,可以删除,但是索引要(--减减 )
迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
增强for循环不能删除
10》静态导入[很少用]
静态导入是只导入类的静态方法
import static 包名+类名+方法名;
11》可变参数
可变参数,就是调用方法的时候,可以传n个参数
test1(int ... nums);//传n个数字
test2(Object ... objs);//传n个任意对象
注意:如果方法有多个参数名,可变参数名必须要放在最后
12》Arrays.asList方法:把数组转成集合
List<String> list1 = Arrays.asList("Gosling","Lucy","Lily");
System.out.println(list1);
List<Student> list2 = Arrays.asList(new Student(),new Student(),new Student());
System.out.println(list2);
13》Collection的toArray方法:把集合的元素 添加到 指定数组中
Collection<String> col = new ArrayList<String>();
col.add("Gosling");
col.add("gyf");
//声明一个字符串数组
String[] strs = new String[2];
System.out.println("===================");
//把集合里的元素 存在 指定的数组中
col.toArray(strs);
for(String str : strs){
System.out.println(str);
}
14》集合嵌套之List嵌套List
案例需求
1.一个班的n学生是一个集合
2.一个学校n班也是一个集合
3.如何将这些数据用一个集合来表示
//1、用集合来表示两个班级
List<Student> java1 = new ArrayList<Student>();
java1.add(new Student("小刘", 18));
java1.add(new Student("小张", 18));
java1.add(new Student("小关", 18));
List<Student> java2 = new ArrayList<Student>();
java2.add(new Student("李某某", 18));
java2.add(new Student("黄某某", 18));
java2.add(new Student("李某某", 18));
//2.用集合来表示学校school
List<List<Student>> school = new ArrayList<List<Student>>();
school.add(java1);
school.add(java2);
//3.遍历
//3.1遍历班级
for(List<Student> stus : school){
System.out.println("班级...");
//3.2 遍历学生
for(Student stu : stus){
System.out.println(stu);
}
}