public class TestLRU {
public static void main(String[] args) {
// int[][] test = new int[][] { { 1, 1, 1 }, { 1, 2, 2 }, { 1, 1, 1 }, { 1, 3, 2
// }, { 2, 1 }, { 1, 4, 4 },
// { 2, 2 } };
// [[1,1,1],[1,2,2],[1,1,3],[2,1],[2,1]],3 [3,3]
int[][] test = new int[][] { { 1, 1, 1 }, { 1, 2, 2 }, { 1, 1, 3 }, { 2, 1 }, { 2, 1 } };
int[] resultList = printLRU(test, 2);
for (int i = 0; i < resultList.length; i++) {
System.out.println(resultList[i]);
}
// resultList.forEach(System.out::println);
}
public static int[] printLRU(int[][] operators, int k) {
List<Integer> resultList = new ArrayList<>();
LinkedHashMap<String, Integer> cacheMap = new LinkedHashMap<String, Integer>();
int row = operators.length;
if (operators == null || row == 0) {
return null;
}
for (int i = 0; i < row; i++) {
int[] bb = operators[i];
if (bb.length == 2) {
if (bb[0] == 2) {
Integer value = cacheMap.get(String.valueOf(bb[1]));
if (value == null) {
resultList.add(-1);
} else {
resultList.add(value);
String key = Integer.toString(bb[1]);
cacheMap.remove(key);
cacheMap.put(key, value);
}
}
}
if (bb.length == 3) {
if (bb[0] == 1) {
if (cacheMap.size() == k) {
String firstKey = (String) cacheMap.entrySet().iterator().next().getKey();
cacheMap.remove(firstKey);
}
String key = Integer.toString(bb[1]);
if (cacheMap.containsKey(key)) {
cacheMap.remove(key);
}
cacheMap.put(key, bb[2]);
}
}
}
int[] cc = new int[resultList.size()];
cc = resultList.stream().mapToInt(Integer::valueOf).toArray();
return cc;
}
// public static <K, V> Entry<K, V> getHead(LinkedHashMap<K, V> map) {
// return map.entrySet().iterator().next();
// }
}