코드
import java.util.*;
//Least Recently Used
class LRU {
public static void main(String[] args){
int[] arr = new Random().ints(20, 1, 11)
.toArray();
int size = 5; //캐시 사이즈
int[] cache = new int[size];
System.out.println(Arrays.toString(arr));
//전체 작업을 순회
for(int i=0;i< arr.length;i++) {
int tmpIndex = -1;
int value = arr[i];
//캐시에 이미 존재하는지
for(int j=0;j<cache.length;j++) {
if(cache[j] == value) {
tmpIndex=j;
break;
}
}
//캐시에 존재할 경우 그 자리를 제외하고 뒤로 밀기
int j = tmpIndex != -1 ? tmpIndex : cache.length-1;
for(; 0<j;j--) {
cache[j] = cache[j-1];
}
cache[0] = arr[i];
System.out.println(Arrays.toString(cache)+"입력값 =" + arr[i]);
}
}
}
결과
[4, 2, 3, 8, 4, 9, 8, 5, 8, 10, 3, 10, 9, 7, 6, 5, 9, 3, 10, 8]
[4, 0, 0, 0, 0]입력값 =4
[2, 4, 0, 0, 0]입력값 =2
[3, 2, 4, 0, 0]입력값 =3
[8, 3, 2, 4, 0]입력값 =8
[4, 8, 3, 2, 0]입력값 =4
[9, 4, 8, 3, 2]입력값 =9
[8, 9, 4, 3, 2]입력값 =8
[5, 8, 9, 4, 3]입력값 =5
[8, 5, 9, 4, 3]입력값 =8
[10, 8, 5, 9, 4]입력값 =10
[3, 10, 8, 5, 9]입력값 =3
[10, 3, 8, 5, 9]입력값 =10
[9, 10, 3, 8, 5]입력값 =9
[7, 9, 10, 3, 8]입력값 =7
[6, 7, 9, 10, 3]입력값 =6
[5, 6, 7, 9, 10]입력값 =5
[9, 5, 6, 7, 10]입력값 =9
[3, 9, 5, 6, 7]입력값 =3
[10, 3, 9, 5, 6]입력값 =10
[8, 10, 3, 9, 5]입력값 =8
최근 사용한 데이터를 캐시에 저장하는 등의 수정이 자주 발생한다, 배열보단 LinkedList 같은 자료구조가 좋다.