I'm well aware of how to detect if two or more 2D objects collide but I'm interested in how to decide whether to check for a collision. In previous projects, I just had every object check against every other object (I know, O(n^2) level of stupidity) and it created a less than fluid gameplay.
Various forums hail the greatness of Quadtrees, B-Trees, and any other kind of tree or structure you can think of.
What is the most efficient structure for determining whether a collision should be checked?