Merge k Sorted Arrays
Bug

This might be a typo, but when I ran your program it infinitely looped.  The problem was in your constructor:


  public HeapItem(int[] arr, int index) {
       array = arr;
       index = 0;
  }



Here, you are setting index to 0 when you should be setting it to the input argument, like this:

  public HeapItem(int[] arr, int index) {
       array = arr;
       this.index = index;
  }   


Reuse HeapItem

Your code all seemed very reasonable to me.  There is just one small improvement I would make here:


      if (current.index &lt; current.array.length-1) {  
         pq.add(new HeapItem(current.array, current.index+1)); 
      }



I would just reuse current instead of creating a new HeapItem, like this:

      if (current.index &lt; current.array.length-1) {
         current.index++;
         pq.add(current); 
      }


Create result list with exact size

One other small thing you could do is compute the output list size, when you are iterating through the arrays.  That way, you could create result with the correct size instead of having it autoexpand as you add elements to it.

  int outputSize = 0;
  for (int i = 0; i &lt; arrays.length; i++) {
      pq.add(new HeapItem(arrays[i], 0));
      outputSize += arrays[i].length;
  }
  List&lt;Integer&gt; result = new ArrayList&lt;Integer&gt; (outputSize);