zoukankan      html  css  js  c++  java
  • 数据结构再总结

    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结构模型

  • 相关阅读:
    UVa532 Dungeon Master 三维迷宫
    6.4.2 走迷宫
    UVA 439 Knight Moves
    UVa784 Maze Exploration
    UVa657 The die is cast
    UVa572 Oil Deposits DFS求连通块
    UVa10562 Undraw the Trees
    UVa839 Not so Mobile
    327
    UVa699 The Falling Leaves
  • 原文地址:https://www.cnblogs.com/PerkinsZhu/p/6283454.html
Copyright © 2011-2022 走看看