For loop not 运行 in Java

For loop not running in Java

我已经声明了 java.util.Map class 的地图。我已经声明了 For 循环来获取键值对,但循环不是 running.My 代码是:

public class ContactService {

    public void getAll(){
         System.out.println("here");
        Department d1=new Department(1,"A","floor");
        Department d2=new Department(2,"B","gigh floor");

        Employee e1=new Employee(1,"ashiwin");
        Employee e2=new Employee(2,"anil");
        Employee e3=new Employee(3,"suman");
        Employee e4=new Employee(4,"ronak");
        Employee e5=new Employee(5,"Bidhya");

        LRUCache<Employee,Department> cache=LRUCache.newInstance(3);

        cache.put(e1, d1);
        cache.put(e2, d2);
        cache.put(e3, d1);

        cache.put(e4, d2);
        cache.put(e5, d1);

        Set<Map.Entry<Employee,Department>> entrySet=cache.entrySet();
         System.out.println("hereaaa");
        for(Map.Entry<Employee,Department> entry:entrySet){
             Employee emp=entry.getKey();

              Department dept=entry.getValue();

              System.out.println(emp);
              System.out.println(dept);
       }


    }
}

我从以下位置调用此方法:

package com.ashwin.jaxmaven11;


import com.ashwin.jaxmaven11.cache.Department;
import com.ashwin.jaxmaven11.cache.Employee;
import com.ashwin.jaxmaven11.cache.LRUCache;
import com.ashwin.jaxmaven11.service.ContactService;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import javax.ws.rs.core.MediaType;


@Path(value="contact")
public class ContactAPI {

    @GET
    public String index(){

       ContactService cs=new ContactService();
       cs.getAll();

        return "hello";
    }

}

我没有使用 spring 或任何其他 java frameworks.I 想要查看 for(Map.Entry<Employee,Department> entry:entrySet){} 循环内部,但是在尝试在 for 循环内部打印 sout 时却没有在控制台打印。 打印的输出是 loop.The 输出的上部块:

LRUCache.java

package com.ashwin.jaxmaven11.cache;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 *
 * @author AshwinPC
 */
public class LRUCache<K,V> extends LinkedHashMap<K, V>  {

     private static final long serialVersionUID = 3801124242820219131L;
     private int size;

     private LRUCache(int size){
         super(size,0.75f,true);
     }

     @Override
     protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
        return size()>size;
    }

     public static<K, V> LRUCache<K,V> newInstance(int size){
         return new LRUCache<K,V>(size);
     }

    public LRUCache() {
    }


}

错误在你的 removeEldestEntry 方法中,你实际上从未在 LRUCache 中设置你的 size 变量,因此它是 0。

removeEldestEntryputputAll (source) 之后调用,当您第一次将 size() 的值放入 removeEldestEntry 为 1,大于 size 为 0。

因此最旧的项目将被删除,这是您刚刚添加的项目。

解法:LRUCache的构造函数中添加this.size = size就可以了