zoukankan      html  css  js  c++  java
  • #java#集合#基本概念

    集合专题

    HashSet

    HashSet不是按照存储元素的顺序写入的,而是通过按照哈希值来存的,所有取数据也是按照哈希值取得,HashSet首先
    判断两个元素的哈希值,如果哈希值相同,会接着比较 equals方法。 hashset通过 hashCode的值来确定元素在内存中的位置,
    一个hashcode位置有多个元素。

    TreeSet

    自定义的对象必须要实现 Comparable的接口,重写 compareTo的函数 才能使用。也可以策略模式,自己定义一个比较器

    LinkedHashSet(HashSet + LinkedHashMap实现)

    底层使用的是 LinkedHashMap保存对象,但是又继承了 HashSet的方法,直接调用的 HashSet的方法。

    HashMap(数组,链表,红黑树)

    HashMap 根据键值的Hashcode存储数据,一般情况下可以直接定位它的值。 HasHMap里面是一个数组,数组的每个元素都是一条单向链表

    capacity: 数组的容量,始终保持为 2N, 扩容后数组大小是当前两倍
    loadFactor,负载因子,默认为 0.75
    threshold: 扩容的阈值,达到这个阈值了,就会扩容 ,等于 capacity*loadFactor
    java 8对 Hashmap做了改进,当 数组容量大于 64,且链表中的元素超过8个以后,这个链表会转为红黑树。
    选择8是因为符号泊松分布,超过8的时候,概率已经非常小了.所以选择8

    ConcurrentHashMap

    ConcurrentHashMap在8以前使用的是一个 Segment数组继承了 ReentrantLock加锁,每次加锁锁住一个 Segment,每个segment是线程安全的,因此也就整一个 HashMap都是线程安全的了。

    concurrentcyLevel: segment的数量,也就是并行级别,segment数量决定了一个 ConcurrentHashMap 的最大线程并发数量是多少。 ConcurrentHashMap 默认 16个segments,理论上只能同时支持最多16个线程的并发。

    java8则是 使用了 CAS的方法来优化。而且 ConcurrentHashMap也是使用了红黑树。

    TreeMap

    实现了 SortedMap接口,可以根据键值来排序,
    TreeMap

    LinkedHashMap

    遍历时候 会按照插入的顺序进行遍历

  • 相关阅读:
    LeetCode 18. 4Sum (四数之和)
    开运算、闭运算、形态学梯度、顶帽、黑帽
    膨胀和腐蚀
    四种滤波方式
    关于平滑处理及图像滤波与滤波器
    27、简述redis的有哪几种持久化策略及比较?
    26、redis中默认有多少个哈希槽?
    25、如何实现redis集群?
    大聊Python----Select解析
    大聊Python----IO口多路复用
  • 原文地址:https://www.cnblogs.com/lyr-2000/p/13298120.html
Copyright © 2011-2022 走看看