Yeah that's definitely something I'm looking into. One of the innovations(?) of the method I'm using is that the world is rendered in one "pass." That is, I don't maintain a zbuffer and then project models after the world is rendered but include them in the raycasting algorithm, so I won't have to worry about buffer access issues between threads.
Spatial hashing is different (it uses a grid of fixed size cells) but in this case is a good idea considering I want the world to be dynamic.
Interesting. I actually just implemented my own basic linked list class that does what I need but I'll look into that. Only problem is that I need it to be dynamic and an ArrayList might use more memory.
Right now I'm working on cleaning the math up a little, some weird things happen to models when they're rendered at certain angles that is probably caused by some floating point errors somewhere. I'll probably need to implement filtering of some sort to make up for it.