一、重点内容泛型
1.增加了代码安全性
* 2.省去了强制转换的麻烦(向下转型)
*/
public class Demo01 {
public static void main(String[] args) {
// fun1();
// fun2();
// fun3();
// 泛型类
// 泛型类是在创建对象的时候 给泛型赋类型
Worker<String> worker = new Worker<>();
worker.setT("haha");
String t = worker.getT();
System.out.println(worker.getT());
}
private static void fun3() {
// 泛型的由来
ArrayList<Student> list = new ArrayList<>();
list.add(new Student("跳跳", "15"));
list.add(new Student("好好", "15"));
list.add(new Student("带带", "15"));
// 泛型可以将 运行时的错误 转到编译器
// Worker worker = (Worker)list.iterator().next();
// worker.work();
}
private static void fun2() {
// 需求:集合中保存了 3个学生对象 迭代器遍历(使用泛型)
// 在JDK1.7 菱形泛型
// 后面的泛型 可以不写 如果不写 默认和声明时泛型一致
// 如果前后泛型都写 必须保存一致
ArrayList<Student> list1 = new ArrayList<>();
list1.add(new Student("跳跳", "15"));
list1.add(new Student("好好", "15"));
list1.add(new Student("带带", "15"));
ListIterator<Student> listIterator = list1.listIterator();
while (listIterator.hasNext()) {
Student next = listIterator.next();
System.out.println(next);
}
}
/*
* 集合保存泛型是字符串的
*/
private static void fun1() {
// 声明一个集合 保存a b c d 迭代器遍历
// 泛型 声明 集合中保存的元素是什么类型的
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
ListIterator<String> listIterator = list.listIterator();
// 正向遍历
// while (listIterator.hasNext()) {
// String next = listIterator.next();
// System.out.println(next);
// }
// 逆向遍历
// 判断前一个元素是否有值
while (listIterator.hasPrevious()) {
// 取出前一个元素
String previous = listIterator.previous();
System.out.println(previous);
}
}
}
二、集合嵌套
public class Demo05 {
public static void main(String[] args) {
// 需求:一个java学科 有2个班 每个班里有2个学生
// 用集合来表示
// 我有一个通讯录 26个组
// a b ...z
// 每组9人
// 创建一个学科的集合
// 学科中装了两个小集合,
// 小集合里面装了学生
ArrayList<ArrayList<Student>> subjects = new ArrayList<>();
// 创建小集合
ArrayList<Student> classes1 = new ArrayList<>();
// 把学生装进小集合
classes1.add(new Student("明明", "15"));
classes1.add(new Student("天天", "16"));
// 创建班2
ArrayList<Student> classes2 = new ArrayList<>();
// 把学生装进小集合
classes2.add(new Student("发发", "19"));
classes2.add(new Student("财财", "18"));
// 把班放进学科
subjects.add(classes1);
subjects.add(classes2);
// 遍历打印
// 第一层把班找出来
for (ArrayList<Student> classes : subjects) {
// 第二层 把班里学生找出来
for (Student student : classes) {
System.out.println(student);
}
System.out.println();
}
}
}
三、Collections中的sort(list)方法
这个方法是系统提供的排序方法
* 但是 按什么去排序 系统不知道你要怎么排序
* 这时系统给你提供一个接口 让你去实现这个接口
* 接口中 你要写排序规则(回调思想)
*
* 集合中盛放的什么对象 就让该对象去实现这个接口(排谁谁实现)
*
* 使用Collections中的sort方法排序步骤
* 1.让集合中被排序的对象 的类 去实现Comparable接口
* 2.实现接口中 的抽象方法(排序是按什么规则的方法)
* 3.编写排序规则
* 4.调用Collections.sort测试
ublic class Demo04 {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("a","15"));
students.add(new Student("c","18"));
students.add(new Student("d","14"));
students.add(new Student("e","16"));
students.add(new Student("f","17"));
// 调用系统的排序方法
// (底层调用了你实现接口中的排序规则方法)
Collections.sort(students);
System.out.println(students);
}
}