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。
removeEldestEntry
在 put
或 putAll
(source) 之后调用,当您第一次将 size()
的值放入 removeEldestEntry
为 1,大于 size
为 0。
因此最旧的项目将被删除,这是您刚刚添加的项目。
解法:
在LRUCache
的构造函数中添加this.size = size
就可以了
我已经声明了 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。
removeEldestEntry
在 put
或 putAll
(source) 之后调用,当您第一次将 size()
的值放入 removeEldestEntry
为 1,大于 size
为 0。
因此最旧的项目将被删除,这是您刚刚添加的项目。
解法:
在LRUCache
的构造函数中添加this.size = size
就可以了