java容器主要有两大类:collection和map;
collection又可以根据子类分为两大类List和set;
- List集合特征:有序可重复;允许元素为null;实现Collection接口;增删慢查询快;list常用的子类为Victor、ArrayList、linkedList三种;
- victor底层为数组结构,线程安全、初始长度为10,扩容后每次增长为2倍,目前已被ArrayLis取代;
- ArrayList底层为数组结构、非线程安全的、初始长度为10,扩容后每次增长为1.5倍,增删的时候需要数组的拷贝与复制,增删慢查询快;
- LinkedList底层为双向链表,非线程安全的,查询慢增删快;
2.set集合的特征:无须不可重复;实现Collection接口;常见的子类有HashSet、TreeSet、LinkedHashSet;
- TreeSet底层是一个TreeMap(红黑树 不太了解),元素不允许为null;非线程安全;
- HashSet底层为一个hash表和红黑树,元素可为null;非线程安全的;
- LinkedHashSet底层就是一个hash表和双向链表组成,父类为HashSet,元素可为null;非线程安全的;
3.Map集合:键值对的形式存在;主要子类有HashMap、TreeMap、LinkedHashMap等;
- HashMap底层为红黑树和散列表组成,取代了HashTable,可以允许键值均为null,hashTabe的键值均不能为null,hashMap为非线程安全的,hashTable为线程安全的,HashMap的初始长度为16;
- linkedHashMap底层为红黑树加双向链表和散列表,初始长度为16,非同步的,有序插入;
散列表和红黑树:
散列表就是Hash表,根据不同的hash值挂载在数组中,如果hash值相同时,用value和数组链表的对象比对,相同则不添加,不同则添加;
红黑树:有2-3树演变而来。。。。。。。
没有心思看了,下次再写,明天总结一下线程。