I suppose you are talking about returning the result of a query.
In that case, the main difference is that when returning a collection, you will have to fetch ALL data from your cursor so as to fill your arrays (or you will have to limit yourself for, say, the 100 first rows), and only then return to the caller. If you have many results to fetch, this solution may need a LOT of memory on the server as well as on the client program. On the contrary, when using a ref cursor, it's up to the client to fetch data as he desires : just the first ten rows, rows between 11 and 50, or all the rows - one row at a time (generally not a good idea), ten by ten, 100 by 100...
In some cases collections might be useful for OUT parameters, but they are mainly useful for IN parameters. In general, prefer to return REF CURSORS. Moreover, REF CURSORS will always be recognized by the client program, whatever the language (which language with an Oracle API could not get the result of a SELECT query ?

), whereas you may have bad surprises with collections support...
HTH & Regards,
rbaraer