They both do what you need : discard all the uncommitted changes, but checkout is designed to switch to a new branch discarding the uncommitted changes on the current branch, so for example :
git branch
*master
#Do some changes
git checkout -f new_feature #It switch to the other branch(new_feature), discarding all the current branch changes, in one single command.
With git reset --hard
you achieve the same goal, but in the case you want also to switch branch you have to do one more command:
git branch
*master
#Do some changes
git reset --hard
git checkout new_feature
I think that in the case you remain in the same branch the two command are equivalent ...