TRUNCATE TABLE is much faster.
The following, with the exception of the Oracle website, explains why:
Deletes the execution of normal DML. That is, they take row locks, they generate repetition (a lot), and they need segments in the UNDO tablespace. Removes clear records from blocks. If an error is made, a rollback may be issued to restore the records before committing. Deletion does not free up segment space, so the table in which all records were deleted retains all the original blocks.
Truncations are DDL and, in a sense, are deceiving. Truncation moves the high water sign of the table to zero. No row level locks are made, no repeated or rollback actions are generated. All extent limits, the original ones of which are not selected from the table (if you have MINEXTENTS set to anything other than 1, then this number of extents is saved, not just the initial one). By re-positioning the high water mark, they prevent the reading of any tabular data, so they have the same effect as deleting, but without all the overhead. Only one small problem: truncate is a DDL command, so you cannot roll it back if you decide you made a mistake. (It is also true that you cannot selectively trim -no "WHERE" is allowed, unlike deletions, of course).
By resetting the high water mark, truncate prevents any tabular data from being read, so it has the same effect as deleting, but without overhead. However, there is one aspect of Truncation to keep in mind. Since Truncate is DDL, it issues a COMMIT before it takes effect, and then another COMMIT, so the transaction cannot be rolled back.
Note that by default, TRUNCATE leaves memory even if DROP STORAGE is not specified.