Yeah, with subclasses there's no real reason to put 'food' and 'weapons' in different lists. If you're worried about calling a 'timePasses' on a lot of uninteresting objects, you could do something clever like...build a linked list of only objects that are affected by time. So when you instantiate a lantern (that can burn out), a flaming sword (ditto), food, monsters, etc, put them in the 'needs to get prodded every turn' list...but mundane leather armor, no.
A thought that I've been mulling over for a few days - would it be more or less system intensive to have every object contain the ASCII value of whatever floor tile it's on? That way, when something is moved, I just have to update where the thing was and where it is now instead of the full map? That's less time drawing, but potentially huge memory usage if there's a lot of things on a particular level.
You're thinking along the right track, and this is a design decision that is very good--just a little misguided. You're definately thinking about the right ideas though! This is a problem you have to solve or your game is going to run way too slow. You don't want to redraw every tile. You only want to redraw the tiles that have changed. So what do you do?...
Well, I can tell you what I just did in my game, and what I think most games do. Each tile on the map has a list of the items it contains, and the map has a 'draw(x, y)' or, you know, something similar. When you draw a specific map tile, you look at the list of items on that square: If there's anything, draw the top item on the pile. If there's nothing, draw the character of the floor there instead. Each item also keeps track of its coordinates on the map. Sounds redundant, but it'll make more sense:
When you have a goblin and it moves north, after verifying that it can go there, it says, "What's my current location? Okay. Remove me from that map tile, and then redraw that map tile. What's the next place I'm going? Okay. Put me on that map tile's list...then redraw that map tile."
The goblin never draws itself. It just changes which map tile it's on, and tells its origin and destination map tiles to redraw. Quick and easy.
If you want to be way too clever--and this is a bigger deal in graphical games, not so much in ASCII ones but it does still matter--you can choose not to redraw each tile right away. Instead, keep a set of coordinates that need redrawing--a 'dirty' list--and then redraw them all right before the player's turn...or at the end of whatever you're doing. This is a user interface decision, and there's reasons to do and to not do it. But if you do it this way, you don't redraw the same tile twice in one turn if one goblin leaves it, then another goblin steps in. Also, graphics are frequently faster if you do all your drawing in one go, instead of spreading it out.
(When used in that last paragraph, 'set' is a specific storage class. If you put the same coordinate into the set twice, there will still only be one copy. It's very fast.)