zoukankan      html  css  js  c++  java
  • java第八周作业

    分析代码:

    public final class LineItemKey implements Serializable {
    private Integer customerOrder;
    private int itemId;
    public LineItemKey() {}
    public LineItemKey(Integer order, int itemId) {
    this.setCustomerOrder(order);
    this.setItemId(itemId);
    }
    @Override
    public int hashCode() {
    return ((this.getCustomerOrder() == null
    ? 0 : this.getCustomerOrder().hashCode())
    ^ ((int) this.getItemId()));
    }
    @Override
    public boolean equals(Object otherOb) {
    if (this == otherOb) {
    return true;
    }
    if (!(otherOb instanceof LineItemKey)) {
    return false;
    }
    LineItemKey other = (LineItemKey) otherOb;
    return ((this.getCustomerOrder() == null
    ? other.getCustomerOrder() == null : this.getCustomerOrder()
    .equals(other.getCustomerOrder()))
    && (this.getItemId() == other.getItemId()));
    }
    @Override
    public String toString() {
    return "" + getCustomerOrder() + "-" + getItemId();
    }
    /* Getters and setters */
    }
    

    其中hashCode的作用是:

    当我们向一个集合中添加某个元素,集合会首先调用hashCode方法,这样就可以直接定位它所存储的位置,若该处没有其他元素,则直接保存。若该处已经有元素存在,就调用equals方法来匹配这两个元素是否相同,相同则不存,不同则散列到其他位置。这样处理,当我们存入大量元素时就可以大大减少调用equals()方法的次数,极大地提高了效率。

    所以hashCode在上面扮演的角色为寻域(寻找某个对象在集合中区域位置)。hashCode可以将集合分成若干个区域,每个对象都可以计算出他们的hash码,可以将hash码分组,每个分组对应着某个存储区域,根据一个对象的hash码就可以确定该对象所存储区域,这样就大大减少查询匹配元素的数量,提高了查询效率。这里由于customerOrder和itemId一起组成一个复合键来标示一个实体,所以如果customerOrder不存在则返回0,如果存在则返回customerOrder的hash值^itemId的数值。

    equal的作用:

    equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。这里是比较两个对象是否相同,如果相同则返回true,如果不相同则返回false。

  • 相关阅读:
    ABP 源码分析目录
    vika维格表模板大赛落幕:3888元大礼包花落谁家?
    OKR太难定?模板大全:产品/研发/运营/销售/行政全都有
    菜鸟成长记(四)----- 实习总结与反思
    菜鸟成长记(三)----- 年终总结与感悟
    菜鸟成长记(二)
    自我激励
    承认
    书评-《当下的力量(珍藏版)》-埃克哈特·托利
    关于吃苦
  • 原文地址:https://www.cnblogs.com/xiangyujojo/p/8966741.html
Copyright © 2011-2022 走看看