diff --git a/graph/src/main/scala/org/apache/spark/graph/impl/GraphImpl.scala b/graph/src/main/scala/org/apache/spark/graph/impl/GraphImpl.scala
index a3cdb97ceade4a55a0afa57c0e64c05bd8a5d795..87fb9dcd2e05f0f6410baa459c9723da98443a7b 100644
--- a/graph/src/main/scala/org/apache/spark/graph/impl/GraphImpl.scala
+++ b/graph/src/main/scala/org/apache/spark/graph/impl/GraphImpl.scala
@@ -4,6 +4,7 @@ import scala.collection.JavaConversions._
 
 import scala.collection.mutable
 import scala.collection.mutable.ArrayBuffer
+import scala.collection.mutable.ArrayBuilder
 
 import org.apache.spark.SparkContext._
 import org.apache.spark.Partitioner
@@ -501,11 +502,11 @@ object GraphImpl {
 
     val vTableReplicatedValues: IndexedRDD[Pid, Array[VD]] =
       msgsByPartition.mapPartitionsWithIndex( (pid, iter) => {
-        val vertexArray = new ArrayBuffer[VD]
+        val vertexArray = ArrayBuilder.make[VD]
         for (msg <- iter) {
           vertexArray += msg.data._2
         }
-        Array((pid, vertexArray.toArray)).iterator
+        Array((pid, vertexArray.result)).iterator
       }, preservesPartitioning = true).indexed(eTable.index)
 
     (vTableReplicationMap, vTableReplicatedValues)