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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Chrisyu 初级黑马   /  2018-1-4 17:19  /  2000 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

知识点总结


day06 集合(Collection, 迭代器, 增强for, 泛型, List子集);集合的体系结构
  • 集合:

    • 是一个统称, 包含很多集合的实现类. 根据不同数据结构, 提供了不同的集合类

Collection接口中常用的功能
  • Collection接口

    • 是单列集合体系的顶层
    • 如何创建Collection对象?

      • 本身是接口, 实际使用的是子类对象. 使用多态,Collection c = new ArrayList<>();


    • 常用方法



        • boolean add(E e): 向集合中添加元素, 添加成功返回true, 添加失败返回false. 永远能够添加成功




        • boolean remove(Object o): 删除元素中的指定元素, 删除成功返回true, 删除失败返回false
        • void clear(): 清空集合中的元素


      • 判断

        • boolean contains(Object o): 判断集合中是否包含指定元素, 包含返回true, 否则false
        • boolean isEmpty(): 判断集合是否为空集合, 即没有元素. 没有元素返回true, 否则false


      • 获取个数

        • int size(): 获取集合中元素的个数


      • 转换

        • Object[] toArray(): 将集合转换为Object[]

迭代器的概述和测试
  • Iterator接口:

    • 迭代器
    • 作用:

      • 提供遍历集合的安全方式


    • 获取迭代器:

      • 使用集合对象调用Interator<E> iterator()方法


    • 成员方法

      • boolean hasNext(): 是否有下一个元素
      • E next(): 返回下一个元素
      • void remove(): 从迭代器指向的 collection 中移除迭代器返回的最后一个元素


并发修改异常
  • 并发修改异常:

    • ConcurrentModificationException
    • 并发:

      • 并行发生, 即同时发生


    • 修改:

      • 指的是会改变集合长度的操作

        • 增加元素
        • 删除元素
        • 清空元素
        • list的set(int index, Object o)方法可以修改集合中某个索引处的元素值, 但并不会改变集合的长度, 所以不会发生并发修改异常

    • 发生原因:

      • 迭代器依赖于集合, 相当于集合的一个副本, 当迭代器在操作时, 如果发现迭代器的副本和集合不一样, 则抛出并发修改异常


    • 如何避免:

      • 方式1: 不使用迭代器
      • 方式2: 在使用迭代器遍历时, 使用迭代器的方法修改

        • 添加元素:

          • List接口中的ListIterator listIterator()获取用于List的迭代器, 然后调用ListIterator的add()方法


        • 删除元素: remove()

  • List接口

    • 列表, 是Collection的子接口
    • 特点:

      • 元素存取有序, 元素可以重复, 有索引

  • foreach:

    • 增强for循环
    • 作用:

      • 遍历数组和集合


    • 格式:

```java // foreach格式
for (元素类型 变量名: 数组或集合对象) { // 每次循环都会遍历出一个元素, 保存到变量名中 }
int[] arr = {1,2,3}; for (int i : arr) { System.out.println(i); }
  • 注意:

    • 增强for循环中不能修改集合(改变集合长度), 会发生并发修改异常

      • 原因: 因为增强for循环内部使用的是迭代器进行迭代



  • 增强for的优缺点:

    • 优点: 简单快捷的拿到每一个元素
    • 缺点:

      • 循环过程中不能修改集合
      • 不能像普通for循环那样使用索引


常见数据结构: 数组
  • 数组的特点:

    • 长度一旦确定则不可改变
    • 元素有整数索引
    • 只能存储同一类型的元素
    • 既可以存储基本数据类型, 也可存储引用数据类型


  • 数组的增删改查:

    • 增加/插入元素:

      • 创建一个新数组, 长度为原数组长度+1
      • 遍历原数组, 将原数组的元素复制到新数组的相同索引位置, 直到遇到要增加元素的索引位置
      • 将要增加的元素值赋值到索引位置
      • 继续复制剩余元素


    • 删除元素:

      • 创建一个新数组, 长度为原数组长度-1
      • 遍历原数组, 将原数组的元素复制到新数组的相同索引位置, 直到遇到要删除元素的索引位置
      • 跳过要删除的元素, 继续将剩余元素复制到后续索引位置


    • 修改元素: arr[0] = 10;
    • 获取元素: int i = arr[0];


  • 通过以上增删改查的操作, 总结出数组的特点:

    • 增删慢
    • 查询快



List的特点和特有功能
  • List接口

    • 继承自Collection接口. 在java.util包下
    • 特点

      • 元素有序(存入和取出的顺序一样)
      • 有整数的索引
      • 元素可以重复


    • 特有功能

      • void add(int index, E element): 添加元素
      • E remove(int index): 删除元素
      • E set(int index, E element): 修改元素
      • E get(int index): 获取元素

List的子类概述, LinkedList特有功能
  • List的子类

    • ArrayList: 底层数组结构. 查询快, 增删慢

      • 常用方法之前学过


    • LinkedList: 底层链表结构. 查询慢, 增删快

      • 特有方法, 用于处理开头和结尾的元素

        • void addFirst(E e): 将元素添加到开头
        • void addLast(E e): 将元素添加到末尾
        • E getFirst(): 获取开头的元素
        • E getLast(): 获取结尾的元素
        • E removeFirst(): 删除第一个元素, 并返回删除的元素
        • E removeLast(): 删除最后一个元素, 并返回删除的元素

使用LinkedList实现栈和队列
  • 栈: 先进后出

    • 进: 元素添加到末尾, addLast(E e)
    • 出: 删除末尾的元素, removeLast(E e)


  • 队列: 先进先出

    • 进: 元素添加到末尾, addLast(E e)
    • 出: 删除开头的元素, E removeFirst()

File类的概述和常用功能

  • 注意: 目录路径字符串写2个斜线: a\\b, 或a/b
    • 原因: 一个斜线可以和字母组合编程特殊字符, 如\t, 所以要把斜线转义为普通的斜线, 即\\t
  • java.io.File类: 是文件和目录的路径名的抽象表现形式(也就是文件和目录在Java中的形式, 既能表示文件, 也能表示目录)
    • 构造方法(创建了File对象, 并将其指向该路径. 注意: 不会在磁盘上创建这个文件)
      • File(String pathname): 使用指定的路径名创建一个File对象.
      • File(String parent, String child): 根据指定的父路径和文件路径创建File对象.
      • File(File parent, String child): 根据指定的父路径File对象和文件路径创建File对象
    • 常用成员方法
      • 创建:
        • boolean createNewFile(): 创建一个新文件. 返回是否创建成功
        • boolean mkdir(): 创建目录, 返回是否创建成功
        • boolean mkdirs(): 创建多层目录, 包括指定路径中缺少的父级目录. 返回是否创建成功
          • 注意: 创建目录就只创建目录, 不会创建文件. 即使有a.txt也会把他作为目录名创建目录

      • 删除
        • boolean delete(): 删除文件或目录. 返回是否删除成功
          • 注意: 删除是永久删除, 回收站没有

      • 获取
        • String getPath(): 获取创建File对象时使用的路径(创建时是相对路径则返回相对路径, 是绝对路径则返回绝对路径)
        • String getAbsolutePath(): 获取File对象的绝对路径字符串
        • File getAbsoluteFile(): 获取包含绝对路径的File对象
        • String getParent(): 获取File对象的父路径字符串
        • File getParentFile(): 获取File对象的父路径的File对象
        • String getName(): 获取File对象代表的文件名或目录名(不含上层目录)
        • long length(): 获取File对象所表示的文件的大小, 单位byte
          • 注意: 如果File对象是一个目录, 则返回值不确定; 如果文件不存在, 则返回0L
        • long lastModified(): 获取文件上次修改时间
      • 判断
        • boolean exists(): 判断文件或目录是否存在
        • boolean isAbsolute(): 判断File中保存的是否是绝对路径
          • 注意: 无论该文件是否真实存在, 只判断创建File时使用的路径字符串
        • boolean isDirectory(): 判断该File对象是否为目录
        • boolean isFile(): 判断该File对象是否为文件
        • boolean isHidden(): 判断该文件或目录是否为隐藏的
      • 修改
        • boolean renameTo(File dest): 修改文件名
      • 重要获取功能(稍后知识点讲解)
        • String[] list(): 获取当前路径下所有文件和目录名称(不包括父路径). File对象必须是目录, 否则会报错
        • File[] listFiles(): 获取当前路径下的所有文件和目录的File对象. File对象必须是目录
        • static File[] listRoots(): 返回系统的所有根路径. windows系统就是各种盘符
File的重要获取功能
  • File类的重要获取功能
    • String[] list(): 获取当前路径下所有文件和目录名称(不包括父路径).
      • 注意: File对象必须是目录, 否则会报错
    • File[] listFiles(): 获取当前路径下的所有文件和目录的File对象.
      • 注意: File对象必须是目录, 否则会报错
    • static File[] listRoots(): 返回系统的所有根路径. windows系统就是各种盘符
字节流: InputStream和OutputStream概述
  • FileInputStream类
    • int read(): 读取一个字节, 读完返回-1
      • 注意返回值是int类型, 而不是byte
    • int read(byte[] b): 读取字节到数组中, 返回读取的长度. 读完返回-1
    • close(): 释放资源
  • FileOutputStream类
    • void write(byte b): 写一个字节
    • void write(byte[] b, int offset, int len): 从字节数组的指定索引开始写入指定长度个字节
    • close(): 释放资源

    • 静态方法
      • static InetAddress getLocalHost(): 获取本机的InetAddress对象
      • static InetAddress getByName(String host): 根据主机名或IP的字符串获取主机的InetAddress对象
      • static InetAddress getLoopbackAddress(): 获取回环地址的InetAddress对象
    • 成员方法
      • String getHostAddress(): 返回主机的IP地址
      • String getHostName(): 返回主机名
      • String getCanonicalHostName(): 获取此IP地址的完全限定域名

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马