我假设,Collections中的不可修改的方法返回底层集合的视图或外观。似乎不言自明的是FILE *readFile = fopen("test.bin","rb");
int data;
while(fread(&data,1,1, readFile)==1){
printf("%d", data); //here it will output some random number
}
fclose(readFile);
将使用基础列表的顺序,而unmodifiableList
可以随意执行任何操作,因为没有排序。
我正在使用unmodfiableSet
这是一个集合,但确实保留了排序,并试图公开保留基础排序的集合的不可修改的视图。使用LinkedHashSet
似乎不合适,但我无法使用unmodifiableSet
。我无法找到保证unmodifiableList
将使用基础集合中的任何排序,但我怀疑它会。
有人能指出一个定义这种行为或与之矛盾的规范吗?
答案 0 :(得分:1)
对mediator
.Setup(m => m.Send(It.IsAny<TransferNotificationCommand>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(new Notification()) //<-- return Task to allow await to continue
.Verifiable("Notification was not sent.");
//...other code removed for brevity
mediator.Verify(x => x.Send(It.IsAny<CreateIsaTransferNotificationCommand>(), It.IsAny<CancellationToken>()), Times.Once());
的调用只是创建了一个瘦包装器,在进行mutate方法调用时抛出异常。所有其他方法调用都会进入底层集合,因此除了原始集合之外,没有任何其他方法会影响排序或其他内容。
包装器没有状态,它只有对底层集合的引用。
整个Collections.unmodifiableXXX
包装器非常小,因为迭代器(继承自UnmodifiableSet
)使用底层集合中的迭代器(除了它覆盖UnmodifiableCollection
),迭代顺序为与原始集合中的完全相同。
remove()
答案 1 :(得分:0)
根据集合类的java doc:
不可修改的集合:集合元素的迭代顺序未指定,并且可能会发生变化。