import java.util.*;public class Solution {    public String[][] topKstrings (String[] strings, int k) {        if(strings==null || strings.length==0){            return null;        }          HashMap<String,Integer> map = new HashMap();        for(String s : strings){            map.put(s,map.getOrDefault(s,0)+1);        }        PriorityQueue<Node> minHeap = new PriorityQueue();        for(Map.Entry<String,Integer> entrySet : map.entrySet()){            Node node = new Node(entrySet.getKey(),entrySet.getValue());            if(minHeap.size() < k){                minHeap.add(node);            }else{                if(minHeap.peek().compareTo(node) < 0){                    minHeap.poll();                    minHeap.add(node);                }            }        }                String[][] result = new String[k][2];        for(int i=k-1;i>=0;i--){            Node node = minHeap.poll();            result[i][0] = node.name;            result[i][1] = String.valueOf(node.count);         }        return result;    }        class Node implements Comparable<Node>{                String name;          int count;                public Node(String name,int count){            this.name = name;            this.count = count;        }                @Override        public int compareTo(Node node){            if(this.count > node.count){                return 1;            }else if(this.count < node.count){                return -1;            }else{                return node.name.compareTo(this.name);            }        }    }}