zoukankan      html  css  js  c++  java
  • 雨课堂知识点总结(十二)

    3.5 Equality
    1.
    ADT的equals( )需要满足的三个性质是[填空1]性、[填空2]性、 [填空3]性
    答案: 自反性;对称性;传递性;
    2.
    以下针对ADT等价性的说法,不正确的是
    A
    如果对象a和b的R值被AF映射到相同的A值,则a和b等价
    B
    对对象a和b调用任何相同的方法,都会得到相同的返回值,则它们是等价的
    C
    对象a和b不等价,那么该ADT中不应存在任何方法op使得a. op()=b. op()
    D
    对象a和b是等价的,那么a和b的rep中每个field的值也- -定是相等的
    正确答案:CD
    A选项是从AF的角度判断等价性。
    B选项是从外部观察者的角度来判断等价性。
    C选项:是可以存在的这样的操作的。即使这个操作返回相同的结果,该ADT还应有其他操作会让a和b执行后的结果不同。
    D选项:判断等价性取决于A值的等价性而非R值。很有可能多个R值对应于同一个A值。
    3.
    Java中有两种不同的操作来验证对象的等价性,分别为==和equals(),它们的”学名”是[填空1]等价性和[填空2]等价性。
    答案: 引用 对象
    4.
    某个ADT的REP是:private int no;
    private String name;他的AF是:
    AF(no) == ID of a student  
    那么以下equals( )正确的是:
    A: return this.no == that.no
    B:return this.no == that.no&&this.name == that.name
    C:return this.no == that.no&&this.name.equals(that.name)
    D:return this.name.equals(that.name)

    答案:A
    5.
    针对mutable的Java类,有两种等价性,分别为[填空1]等价性和[填空2]等价性。
    答案:观察 行为
    6.
    以下关于的等价性的说法,不正确的是
    A:0bject类缺省的equals()是判断两个对象内存地址是否相等

    B:若a和b满足a. equals(b)为真,那么a. hashCode()==b. hashCode( )也应为真

    C:若a. equals(b)为假,那么a.hashCode( )==b. hashCode()可以为真

    D:针对mutable的类,由于其rep在变化,直接使用==判断是否相等即可,无需override equals( )

    正确答案:D
    D选项:这要取决于实际需求。例如Java中List和Date等mutable的类,都override了equals()方法,实现观察等价性。
    7.
    关于hashCode()的说法,不正确的是_
    A:具有相同hashCode( )返回值的两个对象a和b,必须做到a . equals(b)为真
    B:若hashCode( )始终返回同一个值, 则违反了0bject对hashCode( )的要求
    C:如果不override hashCode( )方法,object类缺省实现也可以满足要求
    D:一个对象实例的hashCode( )返回值,在其生命周期内可以发生变化
    正确答案: BCD
    答案解析:
    针对C选项:还是要看需求是什么,不能一概而论
    针对D选项: mutable对象的
    hashCode在其mutator方法执行后,就会发生变化,因此在hash table中的位置也可能随之发生变化。
    8.
    Date d = new Date(2019,4,1);
    Set<Date> hs = new HashSet<>();
    Set<Date> ts = new TreeSet<>();
    hs . add(d);
    ts. add(d);

    d. setYear(2020) ;
    println(hs. contains(d));println(ts . contains(d));

    该代码执行后会打印出:
    A: True; True
    B: True; False
    C: False; True
    D: False; False
    正确答案: C
    答案解析: :
    hashCode ,顾名思义,mutable对象的hashCode变化之后,只会影响受hashSet ,不会影响TreeSet

    9.
    Date d = new Date(2019,4,1);
    Date f = new Date(2019,4,1);
    List<Date> al=new ArrayList<>();
    List<Date> ll=new LinkedList<>();
    al. add(d);
    ll . add(f);
    println(d.equals(f));
    println(al.equals(ll));
    该代码执行后输出的是:
    A:True; True
    B:True; False
    C:False; True
    D:False; False
    正确答案: A
    答案解析:
    Date是mutable的,它实现的是观察等价性,所以d和f两个值等价。

    List也是mutable的,实现的也是观察等价性,所以判断其中每个元素的等价性,而d与f是等价的,故al和I也是等价的。这个跟其具体的类型( ArrayList和LinkedList )无关。

  • 相关阅读:
    When to Partition a Table and an Index
    Hello, world
    提交
    SubmitOncePage:解决刷新页面造成的数据重复提交问题
    压缩ASP.NET中的ViewState
    asp.net千奇百怪的日历
    ICallbackEventHandler实现
    xml數據
    CrystalReports
    [转]Microsoft Visual Studio 2005中使用水晶报表
  • 原文地址:https://www.cnblogs.com/HIT-ryp/p/10648547.html
Copyright © 2011-2022 走看看