第一种,构造器(Creator),是指为了创造某个类型的新对象的方法,可能实现为构造函数或静态函数(通常称为工厂类方法);第二种,生产器(Producer),是指能从该类型的旧对象中创建新对象的方法;第三种,观察器(Observer),是指能够获取对象类型并返回不同类型的对象的方法;第四种,变值器(Mutator),是指能够改变对象属性的方法
以下关于ADT的RI和AF的说法,不正确的是___
A ADT的Abstract空间(A)中的某个值,在其Rep空间®中可能有多个值与其对应
B 若ADT的某个方法返回一个mutable的对象,并不一定表明该ADT产生了表示泄露
C 若ADT的任意costructor所构造出的object都满足RI、每个mutator方法执行结束后都保持RI为真,那么该ADT的RI就始终为真
D 一个immutable的ADT,其rep可以是mutable的
正确答案:C
答案解析:
针对B选项:通过defensive copy返回mutable对象,其实并未产生表示泄露
针对C选项:如果存在表示泄露,外部client就可以修改内部rep的值,就可能导致RI违反。
针对D选项:of course,只要没有rep exposure就没有问题。
论是直接迭代还是for-each循环(for-each内部也是用迭代器实现)语句,对容器迭代的标准方式都是Iterator。但是,即使是使用迭代器,也无法避免在迭代器在迭代期间对容器加锁。这是因为设计同步容器的迭代器时并没有考虑并发修改的问题。
它们表现出的行为是及时失败的,也就是容器在迭代的过程中如果被修改,就会抛出ConcurrentModificationException失败。
输出ArrayList会调用他的toString方法,而调用toString方法将使用迭代器,可能会抛出ConcurrentModificationException问题。
容器的hashCode,equal,containsAll,removeAll和retainAIl等方法,都会对容器进行迭代,抛出ConcurrentModificationException。
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)