which are best method to get collection in magento 2

you should use the factory approach.
The advantage is: you may decide at one point to add some common behavior when a certain collection is retrieved. If the factory is autogenerated, you can just create your factory class and add the behavior in your code. This way, your factory will be used instead of the autogenerated class.
It's kind of similar to using getName method instead of getData('name').

The advantage of using the object manager is that you have to write less code, but this does not make it right.


Factories are special objects that have only one purpose: to create an instance of one non-injectable class or interface.

See more details in official documentation


Use Constructor Injection method, the second one..

Factory method is best practice to get the Collection, so use Factory Method.

However, at some places ObjectManager comes in hand as Constructor injection doesn't work for Collection (i.e: Observer classes)..

Rest is explained in KAndy's given official magento link.