V.B.
First of all...welcome to toddler-hood! This is completely normal for kids that age. The only thing you can do is to continue to redirect him and explain that he has to share. If he hits or pushes, get down on his level and tell him "no hitting" or "no pushing". You may even need to start a small timout for him when he exhibits the more violent behavior like hitting. Just sit him down and turn on a timer for 1 minute and tell him he can't get up until he hears it beep. He may not stay there, but you should probably start giving that a try. If you have to, you can sit him on your lap facing away from you and from the action (maybe have him stare at a wall) and keep him there until time is up. It's tough at this age because they are just learning how to interact with other kids (until now...they have mostly kept to themselves), but they still have the super selfish streak in them and think the world revolves solely around them. It's up to us to teach them differently.
One other thing you can do since you mentioned that your son doesn't have a lot of opportunities to spend time with other kids his own age is to teach him how to share by playing a game with him. Sit facing each other and get a ball or other toy that he likes. Practice giving it back and forth to each other and when he hands it over, praise him for sharing with you. Then, ask him if he would like a turn and hand it back. This way, he will start to understand what sharing is and that by giving up a toy, it doesn't mean he won't get to play with it again. Good luck. This can be a trying age, but it gets better in a few months when they can start communicating more.