I tend to use spritesheets, purely for the fact that all my images are in one place. Im interested to know how it affects performance though.
I do it by creating a 256x256 image in Paint.NET and then use the GridMaker plugin to create the cells, usually 16x16, but you could also do 32x32.
Then I create a class called SpriteSheet and use it to load the image into a BufferedImage. I create a class called Sprite which also holds a BufferedImage. Using .getSubImage(), you can define the x and y of the individual sprite and the width and height.
As the cells are all the same size, you can create an array of sprites for a row on the sprite sheet using a for loop, multiplying the value by the sprite width each time it loops. The array can be useful for holding the frames for an animation.
I don't think it would improve performance if you only had a small number of images to load. But if you had say 1000 images that needed to be loaded, I think it would be faster to load a few spritesheets than lots of smaller images.