导图 1
集合类
  Collection接口
    单列集合的根接口，用于存储一系列符合某种规则的元素
    List接口
      元素有序，元素可重复
      以线性方式进行存储
    Set接口
      元素无序且不可重复
  List接口
    ArrayList集合
      可看做一个长度可变的数组
      增删元素时，会创建新的数组，效率很低，不适合做大量的增删操作
      可以通过索引的方式来访问元素，所以查找元素很方便
    LinkedList集合
      克服 ArrayList 增删元素效率低的问题而出现的
      双向循环链表，每一个元素都采用引用的方式来记住前后的元素
    Iterator接口
      主要用于遍历Collection中的元素，Iterator对象为迭代器
      提供了next() hasNext() 方法
      foreach循环
        自动遍历容器中的元素，但不能对其中的元素进行修改
        删除元素用it.remove()
        for (Object obj : list) {}
    ListIterator接口
      反向迭代提供了previous() hasPrevious() 方法
      只能用于List集合
    Enumeration接口
      遍历元素
      hasMoreElements() 是否有更多元素 nextElement() 取出元素
  Set接口
    HashSet集合
      LinkedHashSet
      根据对象的哈希值来确定元素在集合中的位置，具有良好的存取和查找性能
    TreeSet集合
      以二叉树的方式来存储元素，实现集合中的元素进行排序
      自定义比较器
  Collections工具类
  Array工具类
    排序查找拷贝填充转换
  Map接口
    双列集合类的接口，用于存储具有键-值映射关系的元素
    HashMap集合
      LinkedHashMap
      不能重复
      遍历
        遍历所有的键，根据键获取相应的值
        先获取集合中所有的映射关系，然后从映射中取出键和值
        通过value()直接获取Map中存储的所有值的Collection集合，然后迭代出集合中的每一个值
    TreeMap集合
      与TreeSet原理一致
      可以通过自定义比较器的方式对所有的键进行排序
    Properties集合
      配置项
    泛型
      集合可以存储任何类型的对象，泛型就是解决从集合中取出来的元素到底是什么类型的问题