当前位置: 首页 > news >正文

太原市建设银行网站首页做网站文字要求

太原市建设银行网站首页,做网站文字要求,卫龙的网站是谁做的,温州微信网站定制Immutable的集合体系#xff0c;还有中很重要的集合没有介绍#xff0c;就是ImmutableMap#xff0c;通过UML图#xff0c;可以看出ImmutableMap的结构体系。 首先来看一下ImmutableBiMap#xff0c;因为普通ImmutableMap的实现依赖于它。ImmutableBiMap在ImmutableMap的基…Immutable的集合体系还有中很重要的集合没有介绍就是ImmutableMap通过UML图可以看出ImmutableMap的结构体系。 首先来看一下ImmutableBiMap因为普通ImmutableMap的实现依赖于它。ImmutableBiMap在ImmutableMap的基础上加入inverse()等方法可以使键值反转。ImmutableBiMap的构造也是根据元素个数的不同使用不同的实现0--EmptyImmutablBiMap1--SingletonImmutablBiMapn(n2)--RegularImmubtalMap代码如下所示 public abstract class ImmutableBiMapK, V extends ImmutableMapK, V implements BiMapK, V {public static K, V ImmutableBiMapK, V of() {//Empty元素内部不维护存储结构inverse()方法直接返回thisreturn (ImmutableBiMapK, V) EmptyImmutableBiMap.INSTANCE;}public static K, V ImmutableBiMapK, V of(K k1, V v1) {//单个元素构造时返回此类内部维护两个元素K,Vinverse()时返回V,K的SingletonImmutableBiMapreturn new SingletonImmutableBiMapK, V(k1, v1);}public static K, V ImmutableBiMapK, V of(K k1, V v1, K k2, V v2) {//多个元素构造是返回此类内部维护两个Entry[]集合一个以key作为hashbucket的位置     //另一个以value作为hashbucket的位置用于inverse()的时候key-value的反转return new RegularImmutableBiMapK, V(entryOf(k1, v1), entryOf(k2, v2));} } copyOf()方法在ImmutableCollections中实现的原则就是如果copyOf()的还是一份ImmutableCollections集合那么只是进行引用的赋值因为集合本身不可变。 看过ImmutableBiMap之后在回头看ImmutableMap就简单了很多只是在ImmutableBiMap基础上去除了inverse()方法并在内部为户单一数组hashbucket 不需要维护反转的数组。在无元素和单一元素构造的时候直接调用ImmutableBiMap.of()和ImmutableBiMap.of(K,V)方法代码如下所示 public abstract class ImmutableMapK, V implements MapK, V, Serializable {/*** Returns the empty map. This map behaves and performs comparably to* {link Collections#emptyMap}, and is preferable mainly for consistency* and maintainability of your code.*/public static K, V ImmutableMapK, V of() {return ImmutableBiMap.of();}/*** Returns an immutable map containing a single entry. This map behaves and* performs comparably to {link Collections#singletonMap} but will not accept* a null key or value. It is preferable mainly for consistency and* maintainability of your code.*/public static K, V ImmutableMapK, V of(K k1, V v1) {return ImmutableBiMap.of(k1, v1);} } 多个元素构造的时候返回RegularImmubtalMap与RegularImmutableBiMap内部实现大同小异去除对反转值-键的数组维护去除inverse()等方法。 最后简单的阐述一下ImmutableSortedMap的实现ImmutableMap单一元素和空元素的实现就不详细说了有兴趣的读者可以自己看看。多元素实现的时候 ImmutableSortedMap的具体实现类是RegularImmutableSortedMap有意思的是它的内部维护key和value的数据结构是两个List那么可想而知排序早在构造的时候就已经完成了而事实确实是这样具体代码如下所示 SuppressWarnings(unchecked)public static K extends Comparable? super K, V ImmutableSortedMapK, V of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {//将排序器和entires传入fromEntries方法return fromEntries(Ordering.natural(), false, 4, entryOf(k1, v1), entryOf(k2, v2),entryOf(k3, v3), entryOf(k4, v4));} static K, V ImmutableSortedMapK, V fromEntries(Comparator? super K comparator, boolean sameComparator, int size, EntryK, V... entries) {for (int i 0; i size; i) {EntryK, V entry entries[i];entries[i] entryOf(entry.getKey(), entry.getValue());}if (!sameComparator) {sortEntries(comparator, size, entries);//遍历entries排序validateEntries(size, entries, comparator);}return fromSortedEntries(comparator, size, entries);} static K, V ImmutableSortedMapK, V fromSortedEntries( Comparator? super K comparator,int size,EntryK, V[] entries) {if (size 0) {return emptyMap(comparator);}//遍历排序之后的entries分开key和value分别组成各自的ListImmutableList.BuilderK keyBuilder ImmutableList.builder();ImmutableList.BuilderV valueBuilder ImmutableList.builder();for (int i 0; i size; i) {EntryK, V entry entries[i];keyBuilder.add(entry.getKey());valueBuilder.add(entry.getValue());}return new RegularImmutableSortedMapK, V(new RegularImmutableSortedSetK(keyBuilder.build(), comparator),valueBuilder.build()); }  ImmutableMap中的Entry也是被Guava重新实现增加了bucket的计算逻辑如下图UML AbstractMapEntry在原有Map.entry基础上将写操作置为直接抛异常ImmutableEntry实现getKey()和getValue()ImmutableMapEntry再加入bucket的计算和维护方法(链表)最终反映到NonTerminalMapEntry和TerminalEntry对于这两个类TerminalEntry为bucket链表的尾结点所以实现如下 static final class TerminalEntryK, V extends ImmutableMapEntryK, V {TerminalEntry(ImmutableMapEntryK, V contents) {super(contents);}TerminalEntry(K key, V value) {super(key, value);}OverrideNullableImmutableMapEntryK, V getNextInKeyBucket() {//尾节点所以没有nuextreturn null;}OverrideNullableImmutableMapEntryK, V getNextInValueBucket() {//尾节点所以没有nuextreturn null;}} 而NonTerminalMapEntry的构造则需要传入下一个Entry private static final class NonTerminalMapEntryK, V extends ImmutableMapEntryK, V {private final ImmutableMapEntryK, V nextInKeyBucket;NonTerminalMapEntry(K key, V value, ImmutableMapEntryK, V nextInKeyBucket) {super(key, value);this.nextInKeyBucket nextInKeyBucket;}NonTerminalMapEntry(ImmutableMapEntryK, V contents, ImmutableMapEntryK, V nextInKeyBucket) {super(contents);this.nextInKeyBucket nextInKeyBucket;}OverrideImmutableMapEntryK, V getNextInKeyBucket() {//同一个bucket中的下一个Entryreturn nextInKeyBucket;}OverrideNullableImmutableMapEntryK, V getNextInValueBucket() {//BiMap才会维护Value的Bucketreturn null;}} 那么在构造的时候如果产生hash冲突就是用nonTerminalMapEntry代码如下所示 RegularImmutableMap(Entry?, ?[] theEntries) {int size theEntries.length;entries createEntryArray(size);int tableSize Hashing.closedTableSize(size, MAX_LOAD_FACTOR);table createEntryArray(tableSize);mask tableSize - 1;for (int entryIndex 0; entryIndex size; entryIndex) {SuppressWarnings(unchecked) // all our callers carefully put in only EntryK, VsEntryK, V entry (EntryK, V) theEntries[entryIndex];K key entry.getKey();V value entry.getValue();checkEntryNotNull(key, value);int tableIndex Hashing.smear(key.hashCode()) mask;Nullable ImmutableMapEntryK, V existing table[tableIndex];// prepend, not append, so the entries can be immutable//在构造是如果产生hash冲突那么直接的append到terminal的前面ImmutableMapEntryK, V newEntry (existing null)? new TerminalEntryK, V(key, value): new NonTerminalMapEntryK, V(key, value, existing);table[tableIndex] newEntry;entries[entryIndex] newEntry;checkNoConflictInBucket(key, newEntry, existing);}}  转载于:https://www.cnblogs.com/pona/p/4564256.html
http://www.huolong8.cn/news/183953/

相关文章:

  • 国外的网站建设wordpress投稿系统
  • 大理高端网站建设友点cms
  • 网站开发询价方案业之峰装饰公司简介
  • 深圳成交型网站建设石景山网站建设有哪些公司
  • 秦皇岛网站制作小程序开发开发平台 英文
  • 北京网站建设搜q.479185700定制营销型网站公司
  • 雁塔免费做网站验证码平台 wordpress
  • 保定网站制作软件网站改版怎样做301
  • 什么网站做顶置便宜温州网站制作网站
  • 怎么下载网站备案号网站开发网页前置开发
  • 怎么用eclipse做网站开发郑州网站建设乛汉狮网络
  • 网站建设 jz.woonl网站速度
  • 学校教育网站模板dede 网站目录
  • 做网站可以用什么数据库网站前端与后台必须同时做吗
  • 泸州百拓网站建设河北网站开发网站
  • 小程序建设吉林关键词优化的方法
  • 网站建设怎么找客源?免费推广网站入口
  • 网站源码怎么上传有没有做高仿手表的网站
  • 做游戏音频下载网站济南网站建设公司电子商务网站
  • 深圳定制家具厂佛山网站优化推广方案
  • 怎么做网站内链大型免费网页游戏排行榜
  • 清远市专业网站制作wordpress评论内网ip
  • 丹徒网站建设方案合理的网站结构
  • 长沙哪里有网站制作2021中国企业500强
  • 做钓鱼网站教程视频可信网站标准版
  • 做网站的公司现在还 赚钱吗义乌网图科技有限公司怎么样
  • 最全的ppt模板网站微网站背景图片
  • 怎么清空wordpress媒体库烟台网站排名seo
  • 建设网站都要学些什么问题建设银行分期手机网站
  • 网站发布教程视频教程萧山人才网手机版