链接映射的特点1 .数据结构:哈希表(链地址法) ) ) ) ) )。
2 .默认数组大小: 16
3 .扩展机制:以原序列的两倍方式扩展
4 .默认放大系数: 0.75f
5 .扩展条件:扩展因子*序列长度
6 .线程是否安全:这个集合中线程不安全
7 .保存数据类型为密钥-值对(key-value )。
8.key和value都是空的
9.key不能重复。 value可以重复
10.key使用同一value更新
LinkHashMap的基本特征:1.key不能重复,value可以重复。
2 .链接hashmap插入有序或访问有序,assessOrder:true访问有序; 假插入规则
3 .底层数据结构是哈希表双向链表
4.key和value都是空的
LinkHashMap从HashMap继承后,HashMap的属性和方法将继承table属性和entry类型。
6 .链接的hashmap的entry类继承HashMap.Entry。 也就是说,它具有key、value、hash和next等属性,另外还添加了两个属性before和after
//头部节点专用传输入口,V header; //accessOrder是插入或控制访问顺序的默认值为false,即插入顺序为ture:的专用文件布尔访问顺序; class EntryK,V extends HashMap.EntryK,V { EntryK,V before,after; }7.链接的HashMap向HashMap添加双向链表。 用于记录节点的插入顺序。 分为访问顺序和插入顺序与acssessOrder方法的实现有关。)
7.1访问有序:每次访问哈希表时,访问节点都会删除指向双链表的链接,并将其添加到双链表的末尾。
7.2插入顺序:只根据插入(即put )方法的顺序创建双链表。
//父类的HashMap如果publicvput(kkey,V value ) if ) table==empty_table ) table为空,则以默认的16个大小填充哈希表inflatetable inthash=hash(key ); intI=indexfor(hash,table.length ); for(entryk,V e=table[i]; e!=null; e=e.next({objectk; if(e.hash==hash((k=e.key )|key.equals ) k ) ) { V oldValue=e.value; e .值=值; e .记录访问(this; 返回载荷值; } }模具计数; addentry(hash,key,value,I ); 返回空值; }在链接的hashmap中,在entry中使用voidrecordaccess(Hashmapk,V m ) LinkedHashmapk,VLM=(LinkedHashmapk,v ) m; if(lm.accessorder({lm.modcount; 移除(; addbefore(lm.header ); }//如果当前访问有序,请从双向链表中删除当前节点,将其插入head的before处理//linkedHashmap中,然后单击voidaddentry(inthash、K key、V value, int bucketIndex )实现supeer//removeeldestentryifinstructedentryk,V eldest=header.after; if(removeeldestentry(eldest ) ) removeentryforkey (eldest.key ); } }在} }HashMap中为addentryvoidaddentry(inthash、K key、V value、int bucketIndex ) if ) (size=threshold ) ) null!=table[bucketIndex] ) (resize(2*table.length ); hash=(空!=key? hash(key ) : 0; bucketindex=indexfor(hash,table.length ); }createentry(hash、key、value、bucketIndex ); }//linkedHashMap中为createentryvoidcreateentry (int hash、K key、V value、int bucketIndex ) { HashMap.EntryK,vold=table table[bucketIndex]=e; //处理双向链表,插入header的before位置e.addbefore(header ); size; }