集合按照其存储结构可以分为两大类,分别是单列集合Collection 和双列集合Map。
    在Collection中定义了单列集合通用的一些方法。
    List继承与Collection,它是一个元素存取有序的集合。它带有索引,可以通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。它可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。
    List还增加了一些根据元素索引来操作集合的特有方法
    用数组结构实现的List称为ArrayList,特点是需要的是连续的一块内存,元素增删慢,查找快,无参默认长度为10,但是是在第一次增加元素的时候扩容为10的,传参数可以指定长度,但是指定长度不代表里面就有元素了,它的size还是0
    用链表结构实现的称为LinkedLIst。他可以利用碎片化的内存,使用的是双向链表结构,增删快,查找慢。通过它提供的大量方法可当成队列,栈使用。

    Map存储的是一对数据,键值对
    哈希表底层采用数组+链表+红黑树实现,根据哈希值计算数组下标,每个数组单元里面都是一个链表,当链表长度超过阈值(8)时,将链表转换为红黑树,散列因子影响扩容时机和哈希表性能,所以一般取75%。不同的哈希表的区别在于,多线程时线程安全与否。需要注意的是如果自定义的类,当做哈希表的key存储在哈希表中,那么,不要去修改它,否则会引起哈希值错乱而导致内存泄漏。如果确实有修改的需求,那么不要存在key上。最后是MAp的遍历,需要通过Map.Entry 接口