A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

15.01_集合框架(对象数组的概述和使用)
  • 数组和集合存储引用数据类型,存的都是地址值


file:///D:/Day15_%E9%9B%86%E5%90%88%20-%20%E9%9B%86%E5%90%88%E6%A1%86%E6%9E%B6&List_files/772699f4-0be2-4273-b698-b140024c8acd.png
15.02_集合框架(集合的由来及集合继承体系图)
  • A:集合的由来
    • 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少
  • B:数组和集合的区别
    • 区别1 :
      • 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
      • 集合只能存储引用数据类型(对象)基本数据类型会自动装箱变成对象
    • 区别2:
      • 数组长度是固定的,不能自动增长
      • 集合的长度的是可变的,可以根据元素的增加而增长

  • C:数组和集合什么时候用
    • 1、如果元素个数是固定的推荐用数组
    • 2、如果元素个数不是固定的推荐用集合
  • D:集合继承体系图
file:///D:/Day15_%E9%9B%86%E5%90%88%20-%20%E9%9B%86%E5%90%88%E6%A1%86%E6%9E%B6&List_files/ae6289c9-a73c-4ab7-9739-e2d73691bf11.png
file:///D:/Day15_%E9%9B%86%E5%90%88%20-%20%E9%9B%86%E5%90%88%E6%A1%86%E6%9E%B6&List_files/checked.png面试题:单列集合的根接口是Colletion么?

  • 从功能角度,Collection是单列集合的根接口。但是从继承的角度来说,其继承了Interable接口,目的是为子类提供增强for遍历功能。(面试先回答前半句,若被否定,补上后半句)
15.03_集合框架(Collection集合的基本功能测试)
  • A:案例演示
  • 基本功能演示boolean add(E e)boolean remove(Object o)void clear()boolean contains(Object o) boolean isEmpty()int size()    --数组长度:length属性;字符串长度:length()方法
  • B:注意:collectionXxx.java使用了未经检查或不安全的操作.

  • 要了解详细信息,请使用 -Xlint:unchecked重新编译.java编译器认为该程序存在安全隐患温馨提示:这不是编译失败,所以先不用理会,等学了泛型你就知道了
15.04_集合框架(集合的遍历之集合转数组遍历)
  • A:集合的遍历:其实就是依次获取集合中的每一个元素。
  • B:把集合转成数组,可以实现集合的遍历:toArray()


  • Collection coll = new ArrayList();
  • coll.add(new Student("张三",23));      //add()传入参数为Object类型,自动提升。相当于:Object obj = new Student("张三",23);
  • coll.add(new Student("李四",24));
  • coll.add(new Student("王五",25));
  • coll.add(new Student("赵六",26));

  • Object[] arr = coll.toArray();              //将集合转换成数组,必须要用Object[] 接收
  • for (int i = 0; i < arr.length; i++) {
  •     Student s = (Student)arr;            //强转成Student
  •     System.out.println(s.getName() + "," + s.getAge());
  • }


15.05_集合框架(Collection集合的带All功能测试)
  • 带All的功能演示boolean addAll(Collection c) --c中元素顺序添加至目标集合boolean removeAll(Collection c)  --删除目标集合所有与c交集的元素,若无,返回falseboolean containsAll(Collection c) --若o中有重复的元素且目标集合中也有一个,认定为包含。若c中含有的元素目标集合中没有,返回falseboolean retainAll(Collection c) --取c与目标集合的交集复制给目标集合,若无相同,目标为空集,返回也为true.注:以上任何方法,若目标集合被改变,返回true,否则返回false。
15.06_集合框架(集合的遍历之迭代器遍历) --Iterator
  • A:迭代器概述
    • 集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
      • Iterator it = c.iterator();
      • //通过集合对象获取迭代器
      • //返回值是一个实现了Itetator接口的子类对象。
      • (实际为Iterator的内部类对象)



  • B:案例演示


    • Collection c = new ArrayList();      //1、创建集合对象
    • c.add("a");                          //2、创建元素对象并添加
    • c.add("b");
    • c.add("c");
    • c.add("d");
    • //3、迭代器遍历
    • Iterator it = c.iterator();          //通过集合对象获取迭代器
    • while(it.hasNext()) {                //集合中的迭代方法(遍历)
    •     System.out.println(it.next());
    • }



15.07_集合框架(Collection存储自定义对象并遍历)
15.08_集合框架(迭代器的原理及源码解析)(了解)
  • A:迭代器原理
    • 迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,第二,代码有底层内部实现,使用者不用管怎么实现的,会用即可
  • B:超哥总结:
    •   不同集合的数据结构是不一样的,这就造成了不同的集合存取元素的方式是不一样的。那么直接将迭代器定义为普通实现类是不合适的。
    •   但是不管什么样的集合,又都需要提供遍历功能(也就是都要有判断是否包含下一个元素的功能和获取下一个元素的功能),
    •   那么有相同的功能,但实现不一样,这时把功能提取出来定义到接口里面(规则的体现)。而在具体的集合类里面实现这个接口即可。
    •   而又由于集合存储数据的方式集合本身最清楚,也就是说迭代器里面的功能如何实现是要依赖于集合的数据结构的。
    • 原则:对修改关闭,对扩展开放



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马