java集合

 Java 集合框架主要包括两种类型的容器:Collection和Map(如下图所示)          

           

一:如上图所示,Collection下有3个常用的子接口分别为Set, List, Queue

1:Set(无序,唯一)

         HashSet:

        底层数据结构是哈希表。(无序,唯一)

                  hashSet主要是通用的存储数据集合

         LinkedHashSet:

                   底层数据结构是链表和哈希表。(插入有序,唯一,先进先出) 

      由链表保证元素有序
                   由哈希表保证元素唯一

         Treeset:

                   底层数据结构是红黑树。(唯一,有序) 

                   Treeset通常用于排序

         三者的相同点:

    1:都是实现Set接口

               2:三者都不是线程安全的,如果要使用线程安全可以使用Collections.synchronizedSet()

         三者的不同的:

    1:HashSet插入数据最快,其次LinkHashSet,最慢的是TreeSet因为内部实现排序

              2:HashSet不保证有序,LinkHashSet保证FIFO即按插入顺序排序,TreeSet安装内部实现排序,也可以自定义排序规则

              3:HashSet和LinkHashSet允许存在null数据,但是TreeSet中插入null 数据时会报NullPointerException               

              代码演示:

      

                                                       

2:List(有序,可重复的)

         ArrayList: 底层数据结构是数组实现,查询快,增删慢,轻量级,效率高;(线程不安全)

      底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。

      而在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面 的节点的位置)。最后一个节点的后指针指向第一个节点的前指 针,形成一个循环。

                      双向循环链表的查询效率低但是增删效率高。ArrayList和LinkedList在用法上没有区别,但是在功能上还是有区别的。

         Vector: 底层数据结构是数组实现,查询快,增删慢。 (线程安全、使用少)

           与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。

      结论:

        在考虑并发的情况下用Vector(保证线程的安全)。

           在不考虑并发的情况下用ArrayList(不能保证线程的安全)

         LinkedList: 底层数据结构是双向链表实现,增删快,查询慢,效率高 (线程不安全)

       LinkedList是采用双向循环链表实现的。
       利用LinkedList实现栈(stack)、队列(queue)、双向队列(double-ended queue )。
       它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()等。

3:queue

 

posted @ 2019-09-25 17:17  【曾】那时年少  阅读(158)  评论(0编辑  收藏  举报