zoukankan      html  css  js  c++  java
  • Java的容器及性能解析

      常用的容器Collection(List,Set,Queue), Map

    ArrayList: 顺序表存储是将数据元素放到一块连续的内存存储空间,相邻数据元素的存放地址也相邻(逻辑与物理统一)。

         优点:  (1)空间利用率高。(局部性原理,连续存放,命中率高) 
                 (2)存取速度高效,通过下标来直接存储。
         缺点:  (1)插入和删除比较慢,比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序。
                      (2)不可以增长长度,有空间限制,当需要存取的元素个数可能多于顺序表的元素个数时,会出现"溢出"问题.当元素个数远少于预先分配的空间时,空间浪费巨大。  

    LinkedList: 链表存储是在程序运行过程中动态的分配空间,只要存储器还有空间,就不会发生存储溢出问题,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点关系间的指针。

        优点:   (1)读取某个元素速度慢。 
                (2)插入和删除速度快,保留原有的物理顺序,比如:插入或者删除一个元素时,只需要改变指针指向即可。
                (3)没有空间限制,存储元素的个数无上限,基本只与内存空间大小有关. 
        缺点:   (1)占用额外的空间以存储指针(浪费空间,不连续存放,malloc开辟,空间碎片多) 
                (2)查找速度慢,因为查找时,需要循环链表访问,需要从开始节点一个一个节点去查找元素访问。
     
    HashMap  散列 通过确定hash值来找到对象,存取效率非常高,和HashSet集合不能保证元素的顺序一样,HashMap也不能保证key-value对的顺序。并且类似于HashSet判断两个key是否相等的标准也是: 两个key通过equals()方法比较返回true,同时两个key的hashCode值也必须相等
     
    LinkedHashMap 也使用双向链表来维护key-value对的次序,该链表负责维护Map的迭代顺序,与key-value对的插入顺序一致(注意和TreeMap对所有的key-value进行排序进行区
     
    Set: 是元素不重复的集合
    包括HashSet,TreeSet,LinkedHashSet
     
    HashMap HashSet:
    也就是说对于两个对象,如果调用equals方法得到的结果为true,则两个对象的hashcode值必定相等;
      如果equals方法得到的结果为false,则两个对象的hashcode值不一定不同;
      如果两个对象的hashcode值不等,则equals方法得到的结果必定为false;
      如果两个对象的hashcode值相等,则equals方法得到的结果未知。
  • 相关阅读:
    第二次作业循环语句
    c语言01次作业分支,顺序结构
    PAT 1027. Colors in Mars
    PAT 1026 Table Tennis
    PAT 1035 Password
    PAT 1038. Recover the Smallest Number
    PAT 1028 List Sorting (25)
    PAT 1041 Be Unique (20)
    PAT 1025 PAT Ranking
    1037. Magic Coupon
  • 原文地址:https://www.cnblogs.com/goldenRazor/p/8249865.html
Copyright © 2011-2022 走看看