# code in java heap

```java
import java.util.*;

class Pair {
    int diff; // Absolute difference from x
    int value; // The actual array value

    Pair(int diff, int value) {
        this.diff = diff;
        this.value = value;
    }
}

public class KClosestElementsWithPair {
    public List<Integer> findClosestElements(int[] arr, int k, int x) {
        PriorityQueue<Pair> maxHeap = new PriorityQueue<>((a, b) -> {
            if (b.diff != a.diff) {
                return b.diff - a.diff; // Sort by difference in descending order
            }
            return b.value - a.value; // Sort by value in descending order
        });

        for (int num : arr) {
            int diff = Math.abs(num - x);
            maxHeap.offer(new Pair(diff, num));
            if (maxHeap.size() > k) {
                maxHeap.poll();
            }
        }
        // Extract values from the heap
        List<Integer> result = new ArrayList<>();
        while (!maxHeap.isEmpty()) {
            result.add(maxHeap.poll().value);
        }

        // Sort the result in ascending order before returning
        Collections.sort(result);
        return result;
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        int k = 4;
        int x = 3;

        KClosestElementsWithPair solver = new KClosestElementsWithPair();
        List<Integer> result = solver.findClosestElements(arr, k, x);

        System.out.println(result); // Output: [1, 2, 3, 4]
    }
}
```
