Not quite the same. For instance, to duplicate a line in Emacs you have to go to the beginning of the line, kill it and then yank twice, and it doesn't even work always, particularly at the end of a buffer. In vi, it's just yyp. No corner cases.
What I like most about emacs though is that I rarely have to do repetitive tasks because I can write a bit of lisp code to do them instead.