总结Java中的集合类

总结Java中的集合类单例集合:都继承自Collection接口:
----------| Collection(List和Set):
----------------------| List(特点是有序可重复)
----------------------------| ArrayList,底层使用Object数组实现,所以特点就是查询快,增删改慢。在增和删的时候会
牵扯到数组增容,以及元素拷贝,所以慢
----------------------------| LinkedList,底层使用链表实现,特点是查询慢,增删快。由于是使用链表实现,增加时
只需要让前一个元素记住自己就可以。删除时让前一个元素记住后一个元素,后一个
元素记住前一个元素,这样增删的效率就比较高,但是查询的时候需要
一个一个的遍历,所以效率极低
----------------------------|Vector:底层和ArrayList一样使用数组实现,但是它是线程安全的,相对应的
就效率低一些。
----------------------| Set (特点是无序不可重复)
----------------------------| HashSet,底层是使用Hash表实现的,首先它会调用hashCode函数去看看那个位置上有没有
元素,如果没有,就直接插入。如果有,就再调用equals函数判断两个地址是否相同,
如果相同则不能插入。如果不同,则可以插入。
----------------------------| TreeSet 底层是红黑树(二叉树),默认对匀速进行自然排序,如果在比较两个对象的时候
返回值是0,那么元素重复。
双例集合:Map,以键值对的形式存储,键不可重复,值可以重复
----------------------------| HashMap 线程不安全,存取速度快,底层是以Hash表实现的
----------------------------| TreeMap 红黑树的数据结构,默认对元素进行自然排序。如果在比较两个对象的
元素的返回值是0,那么元素重复。
----------------------------| HashTable 底层也是使用了Hash表,存取速度快,它是线程安全的。
HashMap和Hashtable的区别:
HashMap是非synchronized,Hashtable是synchronized的,这就意味着Hashtable是线程安全的,
多个线程可以共享同一个Hashtable.
HashMap可以接受为null的键和值,但是Hashtable不可以。