Java集合中的h5房卡斗牛棋牌平台搭建AbstractMap抽象类

    抽象类实现了一些简单通用的方法来构建官方网站:h5.super-mans.com:2012035031VX和tel:17061863513H5房卡斗牛士棋平台,本身并不困难。KESET和值方法源代码的实现是一个教科书范例。
    
    抽象类通常被实现为一个框架来实现其子类的常用方法。
    
    Java中有很多映射类型的数据结构。Map实现了地图界面的一部分作为骨架的实现,即为其子类的各种映射提供了一种通用的方法。
    
    抽象类不能直接通过新关键字创建抽象类的实例,但是可以具有构造函数。AbstractMap提供了一个受保护的非参数构造函数,这意味着只有它的子类可以访问它(当然,它是一个抽象类,其他类不能进入)。直接拆解它,这意味着只有它的子类可以称为非参数构造函数。
    
    在Map接口内定义Entry接口,它是Map映射的内部实现,用于维护存储在Map中的键-值键-值对。Excel通过两种方式实现这个内部接口:一个可变的简单条目和一个不可变的简单不可变条目。
    
    公共静态类SimuleEnter实现条目,JavaIO.SerialEnab化
    
    实现了MAP.Enter接口并实现了可序列化(SerialEnab化y)。
    
    它的方法比较简单,就是取值的操作,键值被定义为最后的修饰符意味着一个不可变的引用。此外,它的setValue方法有点特殊,并且存储的值返回的不是存储的值,而是旧的值。它重写了等值和哈希代码方法。
    复制代码
    
    1个公共布尔相等(对象O){
    2如果(!)(地图的例子)。)///确定参数是否为映射。入口类型,并且相等必须首先是相同类型的吗
    3返回错误;
    4张地图。入口=(地图)。o);////强烈地将对象类型转换为映射。输入类型,其中使用参数而不是K,V是因为泛型类型在运行时被擦除,并且编译器不知道确切的K以及V是什么类型。
    5分别返回EQ(key,e.getKey())EQ(value,e.getValue());和/key和值调用EQ方法来进行判断,并且仅在两者都返回true时才相等。
    6 }
    
    复制代码
    
    1私有静态布尔EQ(对象O1,对象O2){
    2返回O1==null O2=空:O1。equals(o2);/三项式运算符也很简单,除了这里O1和O2是Object类型,但是Object类型的equals方法由==比较引用,所以不要认为这里有问题,因为在实践中,O1类型可能是String类型,即使它变成对象时,在调用等值方法时,仍然调用字符串y=相等方法。
    3 }
    
    要正确重写等值方法并正确使用,通常需要重写哈希德方法。
    
    1公共int hash码(){
    2返回(key=null 0:密钥)。HASCODE())^(value=NULL 0:值)。HAXCODE();当//KEY和值不为NULL时,使用它们的hash码进行XOR操作。
    3 }
    
    公共静态类SimuleMimabable条目实现条目,java.io.Serializable SimpleImmutableEntry
    
    条目(定义为不可变)实际上是不可变的,因为它不提供setValue方法,当同时访问多个线程时,setValue方法自然不能修改该方法。与SimpleEntry相比,它的键和值成员变量被定义为最终类型。HealStValk方法抛出了未支持的操作异常异常。
    
    它的等值和哈希代码方法与SimeEnter一致。
    
    接下来,查看由AcExtMap抽象类实现MAP接口的方式。
    
    公共int大小()
    
    MAP定义一个返回映射集合集合的EngySet方法。通过调用集合集合的大小方法直接调用映射的大小。
    
    公众Boolean isEmpty()
    
    调用上面的大小方法等于0。
    
    公共布尔包容键(对象键)
    
    这种方法的实现相对简单,通过调用EngySeT方法得到迭代器遍历映射集。与参数键相比,Entry.Map可以存储为null的键值,并且因为key=null专门存储在Map中(不能计算哈希代码值),所以这里还要确定参数键是否为空。
    
    公共布尔值(对象值)
    
    该方法与CaseKEY一致。
    
    公共V获取(对象密钥)
    
    此方法的实现类似于上述两种方法,除了它同样地返回布尔值,并且该方法返回值。
    
    公共V放(K键,V值)
    
    没有实现将键-值键-值对存储到Map中的方法,并且直接引发不支持的操作异常异常。
    
    公共V删除(对象键)
    
    通过参数键删除Map中指定的键-值键值对。此方法也非常简单,还可以通过迭代器来遍历Map。条目的集合集合,找到相应的键值,通过调用迭代器*删除方法来删除映射。条目。
    
    公共空投(地图M)
    
    这种方法也非常简单,遍历传入的地图,并调用PUT方法来存储它。
    
    公共空隙清除()
    
    调用EngySet方法获取SET集合,然后调用SETHYAL清除()方法为空。
    
    公共集密钥集()
    
    返回Map键值的集合。AbstractMap定义了一个成员变量瞬态Set keySet,它在JDK7中由volatile修改,但是在JDK8中不使用volatile。ATILE不保证线程安全。密钥集方法的实现有点有趣。
    
    首先要考虑的是,该方法返回一组键值。很自然地想到一个简单的实现,它遍历Entry数组,取出键值并将它们放入集合中,类似于下面的代码:
    复制代码
    
    1公共集密钥集(){
    2组KS=NULL;
    3(MAP.Enter条目:EngySeT()){
    4 Ks加法(CENTI.GETKEY());
    5 }
    6返回KS;
    7 }
    
    复制代码
    
    这意味着每次调用keySet方法时,都会遍历Entry数组,并且大大减少了数据量。我必须说JDK源代码编写得很好,并且它不需要遍历。如果不遍历Entry,那么如何知道Map已经添加了键值k此时的Ey值是多少
    
    答案是在keySet方法中重新实现一组新的定制设置,其中迭代器方法被重写。这是钥匙。迭代器方法返回Iterator接口,这里通过调用entrySet方法,然后调用它的iteratorR方法来重新实现Iterator迭代器。
    复制代码
    
    1公共集密钥集(){
    2组KS=密钥集;/定义的瞬态集密钥集
    3如果(KS=NULL),第一个调用必须为NULL,用下面的代码创建一个集合示例
    4 KS=新建抽象集(){//创建自定义集
    公共Iterator iterator(){//重写集集的5迭代器方法
    6返回新迭代器(){//RE实现迭代器接口
    7个私有迭代器> I=入口集()。迭代器();
    八
    9公共布尔HasNeXT(){
    10返回I.HasNeXT(;);/键值的判断是条目的判断。
    11 }
    十二
    13公共k下一步(){
    14返回I.NeXT(),GetKey();//取下一个键值,即,取入口{ GETKEY。
    15 }
    十六
    17公共空隙移除()
    18 I.移除();//删除键值,即删除条目。
    19 }
    20 };
    21 }
    二十二
    23公共int大小(){//Read Stest-Sug尺寸方法
    24返回抽象地图。这个。size() /key的值是整个Map的大小,因此可以调用这个类的size方法。这是一个内部类,由这个关键字直接表示,应该指定为调用AbstractMap中的size方法,以及没有这个关键字的静态方法
    25 }
    二十六
    27公开Boolean isEmpty(){//Read StaseOy空方法
    28返回抽象地图。这个。IsWORL();如果//对有键值,则确定映射是否为空,因此调用该类的ISHOLL方法。
    29 }
    三十
    31公共空隙清除(){//Read Stase*清除方法
    32抽象地图。这个。清除();
    33 }
    三十四
    35个公有布尔包含(对象k){//Read Stase*包含方法
    36返回抽象地图。这个。containsKey(k);若要/确定Set是否包含数据K,则确定Map是否包含键值,因此调用此类的containsKey方法
    37 }
    38 };
    39密钥集=KS;将该自定义集集赋值给变量键集/,并在稍后再次调用KESET方法,因为密钥集不是空的,只需直接返回即可。
    40 }
    41返回KS;
    
    复制代码
    
    我认为这是一个聪明的实现,尽管这种方法围绕键值进行,但是实际上它可以与Entry一起实现,而不必遍历Entry,并且上面提到的调用entrySet#iterator方法也是模板方法模式的最佳实践。ecause entrySet不是在AbstractMap中实现的,而是交给它的子类来完成,但是keySet方法可以实现为算法框架,即模板方法模式。
    
    公共收藏价值()
    
    对于values方法,可以引用keySet,两者都有相同的优缺点,这里不再重复节省空间。
    
    公共抽象集>入口集()
    
    对其子类给出了一种抽象的方法,说明该方法并不特别通用。
    
    公共布尔相等(对象O)
    
    Map指定只有当Map中每对键值对的键和值一一对应时,它们的等值比较才返回true。如果引用相等,则直接返回true,如果参数o不是Map类型,则直接返回false,如果两个Map的数量不同,则直接返回false。我们的启示。在条件判断中,首先判断简单的基本,然后判断复数。
    
    公共int hash码()
    
    有必要重写Object类的equals方法,重写hashCode。AbstractMap的hashCode实现添加了所有Map的hashCode值。条目(在这种情况下,SimpleEntry或SimeIfimvalEnter条目),最后的总和是地图的哈希代码值。
    
    公共字符串tostring()
    
    关于这个方法没有什么可说的是取出所有的键值并用StringBuilder拼接在一起。
    
    受保护对象克隆()抛出克隆
    
    实现浅拷贝可以防止变量的两个浅拷贝、密钥集和值引起问题。对象中的克隆方法已在所有类的父对象中解决。

猜你喜欢

转载自www.cnblogs.com/h5qipaiyuanma/p/9779639.html
今日推荐