(7)泛型集合,迭代(1,for;2,增强for;3,迭代器),可变参数(不限数量),嵌套

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);
            }
        }
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值