You should have shown the code from the start...
You already have block objects, good.
Unlike calsign, I wouldn't necessarily align the blocks, it can be fun. But the collision can be a bit harder...
So, now, you can check the collision of the moving block against all the other blocks.
I would do a loop on the content of the array list.
Note: if you write
ArrayList<blockdrop> allDrops = new ArrayList<blockdrop>(); you can do
blockdrop drop = allDrops.get(j); without cast.
Side note: by tradition / convention, class names start with an uppercase letter. Not mandatory, but helps distinguishing these names from simple variables.
So, there are some funny things in your code.
You add a drop block on each frame, ie. some 60 blocks per second! You probably want to add one only when the currently moving block stops.
You don't loop over all the blocks:
for (int j=0; j<allDrops.size()/space;j++) Why the
/space?
You don't need to update the blocks that no longer move. You should have a variable pointing to the currently moving block (not yet in the array list, that would list only the stationary blocks), and only update it. Then, you loop over the existing blocks: if it is in the same column that the moving block, test it. Check the bottom of the moving block against the top of the tested block. If they are at the same level, stop the block, add it to the list of stationary blocks and create a new block.
You can have a list of only the top blocks, but that's an unnecessary optimization, actually...