Advertisement
Guest User

Untitled

a guest
Oct 20th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. class LRUCache {
  2.  
  3. static class Node
  4. {
  5. Node next;
  6.  
  7. Node prev;
  8.  
  9. final int key;
  10.  
  11. int value;
  12.  
  13. Node( int k, int v)
  14. {
  15. key = k;
  16. value = v;
  17. }
  18. }
  19.  
  20. final HashMap<Integer, Node> nodes = new HashMap<>();
  21.  
  22. private final int capacity;
  23.  
  24. Node head;
  25.  
  26. Node tail;
  27.  
  28. public LRUCache(int cap) {
  29. capacity = cap;
  30. }
  31.  
  32. public int get(int key) {
  33. Node node = nodes.get(key);
  34. if ( node != null ) {
  35. extract(node);
  36. pushBack(node);
  37. return node.value;
  38. }
  39. return -1;
  40. }
  41.  
  42. public void put(int key, int value) {
  43. Node node = nodes.get(key);
  44. if ( node == null ) {
  45. node = new Node(key, value);
  46. nodes.put(key, node);
  47. pushBack(node);
  48. if ( nodes.size() > capacity ) {
  49. node = popFront();
  50. nodes.remove(node.key);
  51. }
  52. } else {
  53. node.value = value;
  54. extract(node);
  55. pushBack(node);
  56. }
  57. }
  58.  
  59. private void extract( Node node )
  60. {
  61. if ( node.prev != null ) {
  62. node.prev.next = node.next;
  63. }
  64.  
  65. if ( node.next != null ) {
  66. node.next.prev = node.prev;
  67. }
  68. if ( node == tail ) {
  69. tail = node.prev;
  70. }
  71.  
  72. if ( node == head ) {
  73. head = node.next;
  74. }
  75. node.next = null;
  76. node.prev = null;
  77. }
  78.  
  79. private void pushBack( Node node )
  80. {
  81. if ( tail == null ) {
  82. head = node;
  83. } else {
  84. tail.next = node;
  85. node.prev = tail;
  86. }
  87. tail = node;
  88. }
  89.  
  90. private Node popFront()
  91. {
  92. if ( head != null ) {
  93. Node node = head;
  94. head = head.next;
  95. if ( head != null ) {
  96. head.prev = null;
  97. } else {
  98. tail = null;
  99. }
  100. node.next = null;
  101. return node;
  102. } else {
  103. return null;
  104. }
  105. }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement