• 常见的数据类型对比


    HashMap和HashTable

    1. hashMap是数组+链表结构
    • 底层数组+链表实现,可以存储null键和null值,线程不安全
    • 初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂
    • 扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入(临界插入式线程不安全
    • 计算index方法:index = hash & (tab.length – 1))
    1. HashTable底层数组+链表
    • 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化
    • 初始size为11,扩容:newsize = olesize*2+1
    • 计算index的方法:index = (hash & 0x7FFFFFFF) % tab.length
    • Hashtable和HashMap都实现了Map接口,但是Hashtable的实现是基于Dictionary抽象类的
    1. ConcurrentHashMap
    • 底层采用分段的数组+链表实现,线程安全

    ArrayList和LinkedList

    一般大家都知道ArrayList和LinkedList的大致区别:

    1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous)
    2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
    3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
      ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。例如我们可以用ArrayList来存储一系列的String或者Integer。那么ArrayList和LinkedList在性能上有什么差别呢?什么时候应该用ArrayList什么时候又该用LinkedList呢?

    String、StringBuffer和StringBuilder

    1. 长度固定,就算调用 String 的concat 方法,那也是把字符串拼接起来并重新创建一个对象,把拼接后的 String 的值赋给新创建的对象
    2. StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象,StringBuffer 与 StringBuilder 中的方法和功能完全是等价的。调用StringBuffer 的 append 方法,来改变 StringBuffer 的长度,
    3. 三者在执行速度方面的比较:StringBuilder > StringBuffer > String
    4. StringBuffer是线程安全的(StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰)
    5. 如果要操作少量的数据用 = String 单线程操作字符串缓冲区 下操作大量数据 = StringBuilder 多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

    HashMap和TreeMap

    HashMap:底层数组+链表实现,可以存储null键和null值,线程不安全
    HashMap:适用于在Map中插入、删除和定位元素。
    Treemap:适用于按自然顺序或自定义顺序遍历键(key)。
    Treemap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。

  • 相关阅读:
    论文总结
    20179212 2017-2018-2 《密码与安全新技术》课程总结
    20179212 2017-2018-2 《密码与安全新技术》第6周作业
    SM234
    2017-2018-2 20179212 《网络攻防》 作业
    20179212 2017-2018-2 《密码与安全新技术》第5周作业
    第十周作业 缓冲区溢出攻防研究
    密码与安全新技术
    9th
    8th
  • 原文地址:https://www.cnblogs.com/monkay/p/11654254.html
Copyright © 2020-2023  润新知