import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param operations string字符串一维数组
* @param data int整型二维数组
* @param capacity int整型
* @return int整型一维数组
*/
public int[] performOperation (String[] operations, int[][] data, int capacity) {
// write code here
TicketCache ticketCache = new TicketCache(capacity);
List<Integer> returnL = new ArrayList<>();
for (int i=0; i < operations.length; i++){
if (operations[i].equals("putTicket")){
ticketCache.putTicket(data[i][0], data[i][1]);
}else if (operations[i].equals("getTicket")){
int info = ticketCache.getTicket(data[i][0]);
returnL.add(info);
}
}
int[] returnA = returnL.stream().mapToInt(Integer::valueOf).toArray();
return returnA;
}
public class TicketCache{
int capacity;
Map<Integer, Integer> tickectInfoMap;
LinkedList<Integer> linkedL;
public TicketCache(int capacity){
this.capacity = capacity;
this.tickectInfoMap = new HashMap<>();
this.linkedL = new LinkedList<>();
}
public int getTicket(int ticketId){
if (tickectInfoMap.containsKey(Integer.valueOf(ticketId))){
int info = tickectInfoMap.get(Integer.valueOf(ticketId));
linkedL.removeFirstOccurrence(ticketId);
linkedL.addLast(ticketId);
return info;
}
return -1;
}
public void putTicket(int ticketId, int ticketInfo){
if (this.capacity <= 0){
return;
}
if (tickectInfoMap.size() >= this.capacity){
Integer toRemove = linkedL.getFirst();
tickectInfoMap.remove(toRemove);
linkedL.removeFirst();
}
tickectInfoMap.put(Integer.valueOf(ticketId), Integer.valueOf(ticketInfo));
linkedL.addFirst(ticketId);
}
}
}