跟踪返回了哪些 HashMap 值
Tracking which HashMap values have been returned
我有一个很大的 HashMap<Integer, MyObject>
位于服务器上。我需要通过网络将 String
从 MyObject
发送到客户端。我的问题是我想不出一个好的方法来跟踪 MyObject
已经被访问以发送 String
。
我希望客户端可以重复调用服务器的函数来检索 String
,然后客户端可以将所有 String
添加到一个 ArrayList
。服务器将通过返回 null
.
来指示所有 String
已发送
我不能简单地发送所有 String
中的 ArrayList<String>
,因为由于使用 RSA 加密,我只能发送很小的邮件。
到目前为止我想到的唯一方法是保留一个静态实例变量 HashSet<Integer>
来保存所有已访问的 MyObject
。但这意味着我必须在每次查找时将 HashMap
交叉引用到 HashSet
。一定有更好的办法。
这可能是一个 Map 的小例子,它跟踪确实被访问过的键。基本上,它只是覆盖了 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");
}
}
}
您可能想研究使用迭代器来访问 HashMap 的数据
迭代器将无重复地遍历映射中的每个对象,并且您不需要使用集合来跟踪您已经访问过的对象
Iterate through a HashMap
我有一个很大的 HashMap<Integer, MyObject>
位于服务器上。我需要通过网络将 String
从 MyObject
发送到客户端。我的问题是我想不出一个好的方法来跟踪 MyObject
已经被访问以发送 String
。
我希望客户端可以重复调用服务器的函数来检索 String
,然后客户端可以将所有 String
添加到一个 ArrayList
。服务器将通过返回 null
.
String
已发送
我不能简单地发送所有 String
中的 ArrayList<String>
,因为由于使用 RSA 加密,我只能发送很小的邮件。
到目前为止我想到的唯一方法是保留一个静态实例变量 HashSet<Integer>
来保存所有已访问的 MyObject
。但这意味着我必须在每次查找时将 HashMap
交叉引用到 HashSet
。一定有更好的办法。
这可能是一个 Map 的小例子,它跟踪确实被访问过的键。基本上,它只是覆盖了 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");
}
}
}
您可能想研究使用迭代器来访问 HashMap 的数据
迭代器将无重复地遍历映射中的每个对象,并且您不需要使用集合来跟踪您已经访问过的对象
Iterate through a HashMap