app下载平台服务,网站优化快照,网站的关键词在哪设置,苏州家政保洁公司哪家好HashMap中的元素的特点#xff1a; HashMap中的所有key之间是不可重复的、无序的。所有的key构成一个Set集合。 HashMap中的所有的value彼此之间是可重复的、无序的。所有的value构成一个Collection集合。 HashMap中的一对key-value#xff0c;就构成了一个entry。Map中的ent…HashMap中的元素的特点
HashMap中的所有key之间是不可重复的、无序的。所有的key构成一个Set集合。 HashMap中的所有的value彼此之间是可重复的、无序的。所有的value构成一个Collection集合。 HashMap中的一对key-value就构成了一个entry。Map中的entry是不可重复的、无序的。所有的entry就构成了一个Set集合。 HashMap的源码剖析
jdk7 HashMap String , Integer map new HashMap(); //① map.put(AA,78);//② ①创建对象的过程中底层会初始化数组长度为16即Entry[ ] table new Entry[16]; ②“AA”和78封装到一个Entry对象中将此对象添加到table数组中。 添加的过程 将key1value1添加到当前map中 首先需要调用key1所在类的hashCode( )方法计算key1对应的哈希值1此哈希值1经过某种算法hash( )之后得到哈希值2。 哈希值2再经过某种算法indexFor( )之后就确定了其在数组table的索引位置i。 ·如果此索引位置i的数组位置上没有元素则key1value1添加成功。——情况① ·如果此索引位置i的数组位置上有元素若为key2则需要继续比较key1和key2的哈希值2。--哈希冲突。 ·如果key1的哈希值与key2的哈希值不相同则key1value1也添加成功。——情况② · 如果key1的哈希值与key2的哈希值相同则需要则需要继续判断key1和key2的equals( )的返回值。要调用key1所在类的equals( )方法将key2作为参数传入。 ·如果调用equals( )方法返回false则key1value1添加成功。——情况③ ·如果调用equals( )方法返回true则认为key1和key2是相同的。默认情况下value1替换原有的value2. 添加成功的情况 情况①直接将key1value1存放到数组的索引i的位置 情况②与情况③key1value1元素与现有的key2value2构成单向链表结构key1value1指向key2value2jdk7中即头插法。 如果满足以下情况会扩容 当元素的个数达到临界值数组长度*加载因子时就考虑扩容。默认的加载因子为0.75。默认扩容后为原来的两倍。 如果put方法是添加操作会返回null。如果put是修改操作会返回原来位置上的value值。 jdk8中 ①在jdk8中当创建了HashMap实例以后底层并没有初始化table数组。当首次添加keyvalue时进行判断如果发现table尚未初始化则对数组进行初始化。懒汉式 ②在jdk8中HashMap底层定义了Node内部类实现了Entry接口替换了jdk7中的Entry内部类。即创建的数组是Node[ ]。 ③在jdk8中出现哈希值冲突的情况判断相应的keyvalue可以添加到指定发生哈希冲突的索引上采用的是原来的元素指向新的元素即尾插法。 ④在jdk7中底层采用的是数组单向链表。在jdk8中底层采用的是数组单向链表红黑树。 使用红黑树的情况单向链表转换为红黑树如果数组索引i上的元素的个数达到8并且数组的长度达到64时就将此索引i位置上的多个元素改为使用红黑树进行存储。红黑树进行put( )/get( )/remove( )等操作的时间复杂度为O(log n),比单向链表的复杂度O(n)的要更好性能更高。 红黑树退化单向链表转换为单向链表的情况当使用红黑树的索引i上的元素个数低于6时就会将红黑树结构退化为单向链表。 LinkedHashMap与HashMap的关系 LinkedHashMap是HashMap的子类。 LinkedHashMap在HashMap使用数组单向链表红黑树的基础上增加了一对双向链表记录添加keyvalue的先后顺序。便于遍历所有的key-value。 HashSet和LinkedHashSet Hash底层使用的是HashMap。 LinkedHashSet底层使用的是LinkedHashMap。 HashSet的元素的值存储在底层的HashMap的key值中而所有的key值对应的value值都是同一个Object对象HashSet里用不上其value值。LinkedHashSet同理。