java - 跟踪已返回哪些 HashMap 值

标签 java string arraylist hashmap client-server

我有一个大HashMap<Integer, MyObject>它位于服务器上。我需要发送String来自MyObject通过网络到达客户端。我的问题是我找不到一个好方法来跟踪 MyObject已被访问以发送 String

我希望客户端可以重复调用服务器的函数来检索 String ,那么客户端可以添加所有String发送至 ArrayList 。服务器将指示所有 String已通过返回 null 发送.

我不能简单地发送 ArrayList<String>所有String因为由于使用 RSA 加密,我的消息大小受到限制。

到目前为止我想到的唯一方法是保留静态实例变量 HashSet<Integer>包含所有已访问的 MyObject s。但这意味着我必须交叉引用 HashMapHashSet对于每次查找。一定有更好的方法。

最佳答案

这可能是一个映射的小例子,它跟踪确实被访问的键。基本上,它只是重写了 HashMapget 方法,并将确实访问的 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/

相关文章:

Java接口(interface)和扩展ArrayList

java - 我应该使用 ArrayList.clear() 还是创建一个新列表?

java - SWTBot 在单击时挂起

python - 如何解码这个小端(int32)消息?

arrays - Swift 组合两个数组并对数组进行排序

java - 当我打印出arraylist的索引时如何删除最后一个逗号

java - 在页面上显示加载的图像

java - 无边距打印

string - perl:显示原始字符串,包括特殊字符

javascript - 在最少的运行中有效地查找并返回多个值的数组位置