• java常用的基础容器


    1 Vector and ArrayList

    它们都是可以随机访问的。它们的区别是Vector是线程安全的,而ArrayList不是线程安全的。

    2 HashMap的底层实现机制

    2.1 底层数据结构

    每一对key-value pair都有一个专门的数据结构来表示,即一个内部类Node<K,V>,

    然后所有的key-value pair放在一个数组中,transient Node<K,V>[] table。

    2.2 HashMap里面保存的数据

    HashMap里面保存key value pare,并且还会生成hash值。不要被课本里面的用数组下标作为key的默认值所蒙蔽。

    2.3 使用

    2.3.1 HashMap里面是没有加同步机制的

    2.4 计算hash的方法,即计算内部hash key的方法

    hash key的计算是根据key来的,然后放入一个table中的一个bin中,bin中不同的key-value pair是通过key的不同来区分的。

    也就是说,同一个bin中不允许出现两个相同的key。如果出现了的话,那么就是第二次冲突了。该HashMap处理二次冲突的办法很简单,就是直接将old value覆盖。

    2.5 处理冲突的算法

    冲突了的key-value pair都放在一个bin中,当bin中的成员总数小于8是,这个bin是一个链表,当bin中的成员总数大于等于8时,这个bin是一棵红黑树。

    对于红黑树,插入和删除的时间复杂度都是O(logn)。

    3 ConcurrentHashMap底层实现机制

    3.1 底层的数据结构

    3.2 ConcurrentHashMap里面保存的数据

    3.3 加锁的方式和时机

    用synchronized关键字进行加锁。加锁的时机?

    3.4 使用

    3.5 什么是random hash

    ConcurrentHashMap类用的是什么random hash,这样做的目的是什么?

    将ConcurrentHashMap的整个实现搞清楚了,然后再去研究random hash。

    4 ArrayList

    4.1 好的地方

    底层是一个java数组,所以支持随机访问。

    4.2 不好的地方

    4.2.1 插入

    在某个index处插入时,需要先把这个位置开始后面的所有元素都后移一个位置。然后再插入。

    4.2.2 删除

    删除一个元素时,需要把该元素后面的所有元素向前移动一个位置。

  • 相关阅读:
    洛谷 P2896 [USACO08FEB]Eating Together S
    洛谷 P1564 膜拜
    洛谷 P1684 考验
    洛谷 P2031 脑力达人之分割字串
    洛谷 P2725 邮票 Stamps
    洛谷 P2904 [USACO08MAR]跨河River Crossing
    洛谷 P1929 迷之阶梯
    洛谷 P2375 [NOI2014]动物园
    谷歌浏览器禁止表单自动填充
    SQL数据同步之发布订阅
  • 原文地址:https://www.cnblogs.com/hustdc/p/6475451.html
Copyright © 2020-2023  润新知