public V get(K key) {
    	int interval,timeWeight;
        if(cacheMap.containsKey(key)) {
                synchronized(this) {
                        if(cacheMap.containsKey(key)) {
                                Item item = cacheMap.get(key);
                                //LRFU  when factor=1, it is almost RLU, when factor=unlimited big, it is almost FLU;
                                interval=globalTime-item.lastUseTime;//interval betw. current time and lastUseTime 
                                item.lastUseTime = globalTime++;
                                timeWeight=(int) (interval/factor)+1;
                                item.score = item.score/timeWeight + 1; //timeWeight
                                queue.remove(item);
                                queue.add(item);
                                return item.value;
                        }
                        else return null;
                }
        }
        else return null;
    }