List是一种有序的Collection, 元素可以重复
ArrayList是实现了基于动态数组的数据结构,使用可增长的长数组实现的.(扩容增加50%,不可以设置,默认空间10)
LinkedList基于链表的数据结构,使用双链表实现的,对于随机访问,ArrayList优于LinkedList,因为LinkedList需要移动指针,对于新增和删除LinkedList占优势,因为ArrayList需要移动数据.
Vector 是线程安全的,源码中有很多的synchronized,(扩容增加一倍,可以设置,默认空间10),效率相对低
Set不允许包含相同元素,如果是两个对象根据equals方法进行判断
HashSet:不能保证元素的排列顺序,不是同步的,集合元素可以是null但只能放入一个null.(内部是一个hashMap存储,具体逻辑:先获得对象hashCode(),然后根据其值决定对象在bucket中的存储位置)
LinkedHashSet同样根据hashCode值来决定元素存储位置,但同时使用链表维护元素的次序,迭代访问时候性能优于HashSet,但插入时性能弱与HashSet
TreeSet是SortedSet接口的唯一实现类,可以确保集合处于排序状态.默认排序方式:从小到大,可以定制排序,需要实现Comparator接口,实现compare方法。
HashMap 允许key, value为null, 且key为null的只有一个
HashTable ConcurrentHashMap 不允许 key和value为null, 因为他们是支持高并发的,再并发情况下,get( key) 时,无法判段是 set进去的null值,还是没有这个key, 如果,通过contains(key)判断,判断完再调用get,map的数据情况有可能已经发生变化。
TreeMap (基于红黑树,排过序)不允许key为null, 允许 value为null,因为再put时,调用了 compare进行 null值检查
HashSet 底层使用的HashMap实现的,add( value) 使用 map.put(value, new Object()); 故:可以为null值