This question would require a long blog post to be answered correctly.
It all depends on the amount of data you plan to manipulate and the kind of manipulation you want to do with it.
If you plan to load millions of rows, for example, you would be better off using a GTT, because doing it with collections on a multi-user system would be a little risky because of the amount of memory it would require.
Also, if you need the power of SQL to be available to you, you would also need to go with GTTs.
On the other hand, if you need to use data types that are only allowed in PL/SQL, such as boolean, for example, you would have to use collections.
There are many things to consider, so, without more details, a single correct answer cannot be provided.