我有一个大HashMap<Integer, MyObject>
它位于服务器上。我需要发送String
来自MyObject
通过网络到达客户端。我的问题是我找不到一个好方法来跟踪 MyObject
已被访问以发送 String
。
我希望客户端可以重复调用服务器的函数来检索 String
,那么客户端可以添加所有String
发送至 ArrayList
。服务器将指示所有 String
已通过返回 null
发送.
我不能简单地发送 ArrayList<String>
所有String
因为由于使用 RSA 加密,我的消息大小受到限制。
到目前为止我想到的唯一方法是保留静态实例变量 HashSet<Integer>
包含所有已访问的 MyObject
s。但这意味着我必须交叉引用 HashMap
到HashSet
对于每次查找。一定有更好的方法。
最佳答案
这可能是一个映射的小例子,它跟踪确实被访问的键。基本上,它只是重写了 HashMap
的 get
方法,并将确实访问的 Key
添加到 Set
中
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
public class TrackMap<K, V> extends HashMap<K,V>{
private static final long serialVersionUID = 1L;
Set<Object> usedKeys = new HashSet<>();
@Override
public V get(Object key) {
usedKeys.add(key);
return super.get(key);
}
public Set<Object> getUsedKeys() {
return usedKeys;
}
public static void main(String[] args) {
TrackMap<Integer, String> test = new TrackMap<>();
for(int i = 0;i<100;++i) {
test.put(i, Integer.toString(i));
}
System.out.println(test.get(5));
System.out.println(test.get(10));
System.out.println(test.get(15));
System.out.println(test.get(17));
System.out.println(test.get("what?"));
for(Object i : test.getUsedKeys()) {
System.out.println("The key " + i + " was accessed");
}
}
}
关于java - 跟踪已返回哪些 HashMap 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33281646/