I am porting a C++ library to Java and I need a heap data structure. Is there a standard implementation or will I need to do it myself?
No as such there isn't but you can use Priority Queue as a Heap. Its officially told by Oracle to use Priority Queue as a Heap you can also refer to this link for further clarification.
PriorityQueue MinHeap = new PriorityQueue<>();
PriorityQueue MaxHeap = new PriorityQueue<>(Comparator.reverseOrder());