Jade's more or less right ... Oracle uses an overwriting storage manager, which means that when you update a row it is physically overwritten. This complicates concurrency stuff (queries have to read the REDO log to get the old version, as is necessary when another transaction started reading the table before yours started updating it) but keeps tables from growing as they're updated.
However, there's still the deletion problem. Oracle will find free "holes" but a massive delete won't shrink your tablespace files, as I understand it. You have to do something special and there is a way to do it but I don't know it :)
But I know there are people here who do ...