It saves you time....
Lets say I have a brand new (empty) table, and I want to load 1billion rows into it.
You used to do this:
a) load the data ... let say that takes 2hrs
b) now you have to gather stats on it... that possibly going to take ANOTHER 2 hours
But if we loading into an *empty* table then the data we are *reading* from (either another table or a flat file) is the same as the data that will end up in the table. So as we *read* that data we can keep track of the statistics on that data as we load it. Once the load is complete, we can then set the statistics immediately without have to do step (b) above.
Simple example
SQL> create table t as select * from dba_objects;
Table created.
SQL> select blocks, num_rows
2 from user_tables
3 where table_name = 'T';
BLOCKS NUM_ROWS
---------- ----------
1615 81982
The stats are already there without needing to run dbms_stats