I am new to development, I have to deploy some apex classes to production and I am using change set for this. While adding components to the change set, we get an option to add dependencies. I checked dependency for one of my class and attaching this image here. My question is do I need to add all the object and fields listed here to change set. Also what if other apex class has same object or fields listed here
Adding dependency makes sure that you are not missing any components that's needed for deployment.
Example let's say you missed adding a field to the change set that does not exist yet in the target environment, the deployment will fail.
So if you know that the target orgs have all the fields and objects that your apex class is referencing you may skip adding dependencies.
It all depends on how much in sync your source and target environments are and what components you are moving. Sometimes adding all dependency is needed for smoother deployments.
Some considerations when moving all dependent metadata is to make sure you are not adding components that will override something that's unique to PROD.
One common example is metadata like named credential where your sandbox may be connected to a different endpoint than production and hence you may want to remove this component from changeset before moving to Production.
For the next question
If you have two classes depending on an object then that object is added only once to changeset when you say "Add all dependencies". Nothing is duplicated in Changeset.