2021SC@SDUSC
本篇继续介绍其他包的变种
上篇我们已经讲过的包变种有InternalCachedBag、InternalDistinctBag、SelfSpillBag、SortedSpillBag
其中InternalCachedBag和SortedSpillBag继承自SelfSpillBag,InternalDistinctBag继承自SortedSpillBag
InternalSortedBag
继承关系,完全不出意外
public class InternalSortedBag extends SortedSpillBag
一些注释
/**
* 具有倍数的元组(可能)的有序集合。数据在进入时未排序存储,并且仅在需要将其转储到文件或请求第一个迭代器时进行排序。
* 实验发现这比开始排序的存储速度更快。
*
* 我们允许使用用户定义的比较器,但在用户未指定比较器的情况下提供默认比较器。
*
* 这个包没有注册到 SpillableMemoryManager。它计算要保存在内存中并主动溢出到文件中的元组数。
*/
UML图
构造函数
public InternalSortedBag() {
this(null);
}
public InternalSortedBag(Comparator<Tuple> comp) {
this(1, comp);
}
public InternalSortedBag(int bagCount, Comparator<Tuple> comp) {
this(bagCount, -1.0f, comp);
}
public InternalSortedBag(int bagCount, float percent, Comparator<Tuple> comp) {
super(bagCount, percent);
init(bagCount, percent, comp);
}
总觉得特别眼熟,好像这几个包基本都是这么构造的..SortedSpillBag的构造在上一篇,接下来看看测试函数
@Test
public void testInternalSortedBag() throws Exception {
// check adding empty tuple
DataBag bg0 = new InternalSortedBag();
bg0.add(TupleFactory.getInstance().newTuple());
bg0.add(TupleFactory.getInstance().newTuple());
assertEquals(bg0.size(), 2); // 因为是非独特的
// check equal of bags
DataBag bg1 = new InternalSortedBag();
assertEquals(bg1.size(), 0);
String[][] tupleContents = new String[][] {
{ "e", "f"}, {
"a", "b"}, {
"c", "d" }};
for (int