添加对象的ArrayList [哈希合并]
问题描述:
我有将对象添加到数组列表的ArrayList问题的ArrayList。添加对象的ArrayList [哈希合并]
//instantiate Bucket List
ArrayList< ArrayList<Block> > rBucketlist = new ArrayList< ArrayList<Block> >(M-1);
for (int i=0; i<M-1; i++) {
rBucketlist.add(bucket);
}
之后
,当我试图将一个块添加到rBucketlist:
RelationLoader rLoader=relR.getRelationLoader();
//hash phase(R)
while(rLoader.hasNextBlock()){
mBuffer=rLoader.loadNextBlocks(1);
mBuff=mBuffer[0];
for (int tt=0; tt<mBuff.getNumTuples(); tt++){
Tuple temp = mBuff.tupleLst.get(tt);
mod = temp.key%(M-1);//19 buckets allowed
if (mainmemBuffer[mod].getNumTuples()==10){
rBucketlist.get(mod).add(mainmemBuffer[mod]);
mainmemBuffer[mod].tupleLst.clear();
mainmemBuffer[mod].insertTuple(temp);
}
else{
mainmemBuffer[mod].insertTuple(temp);
}
}
}
我就行了有麻烦rBucketlist.get(mod).add(mainmemBuffer[mod]);
而不是增加对块,我似乎添加多个块(不大小10)
这怎么可能?
答
你的“实例化水桶名单”的代码是把在同一个桶的引用到rBucketlist的每一个位置。因此,当您将一个Block
添加到一个存储桶时,看起来您将其添加到所有存储桶,因为它们都是同一个存储桶。
试试这个:
//instantiate Bucket List
ArrayList< ArrayList<Block> > rBucketlist = new ArrayList< ArrayList<Block> >(M-1);
for (int i=0; i<M-1; i++) {
rBucketlist.add(new ArrayList<Block>()); // <-- make a new list every time
}
+0
嗨,感谢您的帮助!这工作(部分)...另一个问题是,当我尝试添加到新的Arraylist每次在这一行:rBucketlist.get(mod).add(mainmemBuffer [mod])我也传递一个引用mainmemBuffer [MOD]。我该如何复制内容呢?一旦我清除缓冲区,我的rBucketlist中的内容也会被替换... – wjy 2014-11-03 06:53:12
你能添加什么是不工作的详细信息? – vidit 2014-11-03 03:39:54
而不是添加一个大小为10的块。它正在添加其他块(大小 wjy 2014-11-03 03:43:45