1.1Collection又派生出来List集合和Set集合,在java1.5以后有派生了Queue队列
1.2List集合下面又派生出
ArrayList,LinkedList,Vector
ArrayList是一个动态数组,也是我最常用的集合,他是允许任何符合规则的元素插入NULL值,每一个ArrayList在创建的时候都有一个初始的容量长度为10,这个容量就代表了数组的大小,每次插入的同时他会自动帮我们进行容量的检查,当快溢出的时候他就会自动帮我们进行扩容操作.ArrayList适合进行随机访问进行查询操作,同时ArrayList是非同步的所以他是线程不安全的
LinkedList也是List接口的另一个实现方式,LinkList还实现了Deque接口,也当做双端队列来使用,也就是说既可以当做栈使用也可以当做队列使用,LinkedList和ArrayList存储机制也是不同的ArrayList内部是以数组的形式保存的集合元素,所以对元素进行随机访问是比较快的,LinkedList内部以链表的形式保存集合中的元素,所以对随机进行查询访问的性能是不如ArrayList的,但是由于他是链表的形式所以他在新增和删除的时候是有比较好的性能的
Vector他与ArrayList结构基本是相似的,但是他是同步的所以他是线程安全的,操作几乎也和ArrayList没有什么区别
1.3Set集合下面又派生出
HashSet,LinkedHashSet,TreeSet
HashSet是Set里面我经常用到的集合,HashSet是按照hash算法来存储数据的,因此有很好的存取和查询性 能,HashSet他是不能保证数据的顺序的,同时HashSet也不是线程同步是,如果多线程要是用HashSet可以用同步代码块来保证他的线程安全问题HashSet是可以存NULL值的
LinkedHashSet他就是HashSet的一个子类他用于HashSet的所有特性,区别就是他是使用链表维护元素的次序,元素的顺序于添加顺序是一致的.由于LinkedHashSet需要维护数据的插入顺序,所以他在存取和查询性能是不如HashSet,但是他在迭代访问是优于HashSet的
TreeSet是可以保证数据处于排序状态的,它采用的红黑树的数据结构来存储集合元素,TreeSet是默认支持两种排序的自然排序和定制排序,默认采用自然排序。
自然排序 TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素的大小关系,然后将元素按照升序排列,这就是自然排序
定制排序是由Comparator对象负责集合元素的排序逻辑。
|