It would be more normal to list the image filenames in an external file of some kind. You can have a text file with lines like “treasure_chest1 = some filename”. It’s always good to move the data out of the code.
You can then store the images in a HashMap, hashed by the name of each tile (e.g. treasure_chest1). This at least saves you from typing all those “BufferedImage whatever = …” lines.
If the tiles are the same for every map, you will only need to load the images once. If they are different on different maps, having it set up this way allows you to load new images when you change maps.
I’m sure this can be improved upon, but it’s a start.
Having over 100 BufferedImages shouldn’t be too bad unless your tiles are really big. If you don’t have much video RAM, you don’t really need for all the tiles to be hardware accelerated, so long as the most common are.
If drawing the screen takes longer than scrolling the screen, you won’t be able to scroll the screen as fast as you like. When you scroll the screen, you basically have to redraw the whole thing. If you have a sufficiently large area in video RAM (which might not even be possible), you could scroll by just changing what part of the area you’re displaying. That might resolve any problems.