集合就是可以存所有类型数据的一个容器
1.了解那些集合?
答:Connection(5个实现类)和Map集合(3个实现类)
只需要知道:ArrayList【底层数组】、LinkedList【底层双向链表】、TreeSet【Comparable+Compartor】、HashMap【List数组+单向链表】集合就算是ojbk了!
Collectinon
---List【接口】
---ArrayList
---LinkedList
---Vector
---Set【接口】
---HashSet
---TreeSet
Map【接口】
---HashMap
---Hashtable
---Properties
----TreeMap
2.解释Collection下5个实现类
1. ArrayList【底层是数组,数组不了解的跳过...这个】
特征:查询快:因为有下标,可以通过【首地址+偏移量】直接找到。
增删慢:因为插入需要移动元素。
扩容机制:jdk1.7之后使用延迟初始化,在添加第一个元素的时候初始化容量10,
当存满的时候,创建一个容量1.5倍的新数组,将老数组复制进去。
2. LinkedList:【底层是双向链表】
特征:查询慢:在空间中不连续,需要通过下标逐个查找。像排队一样,每个人只认识前
后的人,只能一个一个找。
增删快:不需要移动元素,只需要指向插入元素下标。像插队一样,直接插进去就
行,不过前边换了个人。
3. Vector:一个线程安全的ArrayList!
4. HashSet:就是HashMap中的key,value值是空的。
5. TreeSet:会默认升序排序。如果自定义的类,需要实现Comparable接口中
的comparTo()或者自定义一个比较器实现Compartor接口中的compare();
3.map下的3个实现类
1. HashMap【底层hash表,list数组+单向链表】
1.7之前:list数组+单向链表
1.8之后:list数组+单向链表
扩容机制:链表长度到8 && 数组长度>64,转换成红黑树;链表长度小于6,
在转为链表)
初始化容量:默认是16,可以自定义,但是一定是2的幂。写2->4,写5->8.
就是怎么智能,想了解可以看源码。
2. Hashtable:线程安全的HashMap。
Properties:只能存String类型的Hashtable
3. TreeMap:key就是TreeSet。不用管value!
最后送上两张图,没事可以看看