2014-11-03 81 views
0

我有将对象添加到数组列表的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)

这怎么可能?

+0

你能添加什么是不工作的详细信息? – vidit 2014-11-03 03:39:54

+0

而不是添加一个大小为10的块。它正在添加其他块(大小<10)... – wjy 2014-11-03 03:43:45

回答

0

你的“实例化水桶名单”的代码是把在同一个桶的引用到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