- import java.util.HashMap;
- import java.util.Map;
- import java.util.Set;
- public class MainClass {
- public static void main(String[] args) {
- MyMap myMap = new MyMap(3);// 定义上限为3
- for (int i = 10, j = 100; i < 20; i++, j++) {
- myMap.put(i, j);// 放入键值对
- myMap.get(10);// 使用键为10的键值对
- myMap.get(11);// 使用键为11的键值对
- myMap.get(15);// 使用键为15的键值对
- }
- }
- }
- class MyMap {
- private Map map = null;
- private int toplimit;// 上限
- public MyMap(int toplimit) {
- this.toplimit = toplimit;
- map = new HashMap();// map指向一个HashMap对象
- }
- public void put(Object key, Object value) {
- Set<Key> set = map.keySet();// map中的所有键放入一个set中
- System.out.println("放入");
- if (map.size() == toplimit) {// 达到上限
- System.out.println("Map对象的容量已达到上限");
- if (!set.contains(key)) {// 如果这个键是新放入的则执行下面的代码
- int minAccessTimes = ((Key) set.toArray()[0]).accessTimes;
- for (Object k : set) {
- if (minAccessTimes > ((Key) k).accessTimes) {
- minAccessTimes = ((Key) k).accessTimes;// 取出访问量最少的次数
- }
- }
- for (Key k : set) {
- if (minAccessTimes == k.accessTimes) {// 前面找出的最少 的次数来找到对应的键
- map.remove(k);// 移出这个键值对
- break;
- }
- }
- }
- }
- map.put(new Key(key), value);// 放入新的键值对
- for (Key k : set) {
- System.out.println(k.key + "," + map.get(k).toString() + ","
- + k.accessTimes);
- }
- }
- public Object get(Object key) {
- System.out.println("使用");
- Set<Key> set = map.keySet();
- Object value = null;
- for (Key k : set) {
- if (k.key.equals(key)) {
- ++k.accessTimes;// 每使用一次访问量加1
- value = map.get(key);
- }
- }
- for (Key k : set) {
- System.out.println(k.key + "," + map.get(k).toString() + ","
- + k.accessTimes);
- }
- return value;
- }
- class Key {
- private int accessTimes = 0;// 存放这个键值对的访问量
- private Object key = null;// 存放原始的键
- public Key(Object key) {
- this.key = key;
- }
- }
- }
复制代码 看看吧,个人觉得功能算是实现了 |