gpt4 book ai didi

java - For 循环未在 Java 中运行

转载 作者:行者123 更新时间:2023-12-01 19:35:42 26 4
gpt4 key购买 nike

我已经声明了java.util.Map类的Map。我已经声明了 For 循环来获取键值对,但循环没有运行。我的代码是:

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 框架。我想看看 for(Map.Entry<Employee,Department> entry:entrySet){} 的内部循环,但在 for 循环内尝试打印 sout 时,控制台中未打印。打印的输出一直到for循环的上 block 。打印的输出是:

enter image description here

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 ) 之后调用removeEldestEntry 中的 >size() 为 1,大于 size 0。

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

解决方案:LRUCache的构造函数中添加this.size = size就可以了。

关于java - For 循环未在 Java 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57662048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com