PerKins Zhu

Le vent se lève,il faut tenter de vivre.

导航

数据结构再总结

Posted on 2017-01-13 17:10  PerKins.Zhu  阅读(309)  评论(0编辑  收藏  举报

List
    ArrayList(具体情况需要进行具体分析,不能死记理论)
        1、可指定容量,如果不指定则默认10.  扩容策略为:(oldLength*3/2)+1,可调用ensureCapacity()进行手动扩容。
        劣势:在进行删除、添加的时候(不包括不需要扩容的情况:数组没满的情况下的添加和最后一位元素的删除操作),需要对操作位置后面的数组进行数据移位(添加的时候都需要进行复制,删除的时候只对操作位置后面的进行复制,调用System.arraycopy()),当数据量较大,操作位置靠前的时候,这是效率会变低
        优势:当进行get(index)或者set(index,obj)的时候比较迅速        
    LinkList
        1、环链进行数据存储
        2、当根据index获取元素的时候会根据index < (size >> 1)的大小来决定由前到后还是由后到前来进行遍历搜索。
        3、indexOf(obj)从head to end 进行遍历搜索;lastIndexOf(Object o) 由后到前返回第一个查找到的数据。
        4、peek()和element()都是返回第一个元素,只是当没有元素时,peek返回null,而element将会报异常NoSuchElementException。
        5、LinkedList可以通过Iterator进行指定位置以后的元素迭代输出。
        优势:在首尾进行元素插入或者删除时较快,但是如果指定位置时,由于需要循环链表进行查找,所以此时也会有些延迟。总体来说,在进行数据插入和删除的时候,效率是高于ArrayList的。
        劣势:LinkedList占用内存较多,其次,在进行元素获取的时候,get(index)的效率由于需要进行循环则较落后于ArrayList,不过在进行getIndexOf(obj)的时候和数组的效率相同,都是由前到后进行依次查找。
Map
    HashMap(结构模型见附件)
    1、底层用数组实现  table = new Entry[capacity];
    2、允许key值为null,存放在table[0]的链表中。
    优势:对于查询操作来说,直接获取hashCode计算index,然后从table数组中取值,具有数组的快速获取优势;在进行插入和删除操作时,由于hash冲突的解决方式是通过链表,所以又具有链表的快速插入和删除的优势。
    劣势:占用内存,遍历的时候使用Iterator进行遍历。    
        LinkedHashMap(结构模型见附件)
            1、继承自HashMap,存储容器依旧是数组和链表。
            2、自定义了自己的Entry实体,添加了before和after两个属性,此另个属性用来实现linked的性质。
            3、具体模型,主要结构模型和HashMap一样,不同的是,LinkedHashMap 根据数据插入顺序,通过before和after把所有的实体串联成了一个链表。此链表是横跨table[i]的,不同于解决hash冲突的链表(纵向的)。
            4、模型:画出模型,注意。head的位置在外面
    TreeMap
        红黑树存储。预留,主要还是二叉树。可以参考平衡二叉树:http://www.cnblogs.com/PerkinsZhu/p/5824015.html
    HashTable
        1、不能存储key或者value为null的数据
        2、扩容策略是    int newCapacity = oldCapacity * 2 + 1
        3、线程安全的,所有的public方法都添加有synchronized关键字;
        4、存储模型和hashMap相同        
Set
    HashSet
        1、和HashMap相同,只是仅仅使用HashMaop的key进行数据存储。
        2、注意friendly HashSet()的方法是预留给子类LinkedHashSet使用的。
        LinkedHashSet
            1、继承HashSet,数据存储是使用LinkedHashMap,因此保留着插入顺序。只使用key值进行存储数据。
    TreeSet
            1、实现单元素排序的数据结构,通过TreeMap实现的。

 

附件:

     HashMap结构模型
 

    LinkedHashMap结构模型