0

我一直在尝试了解如何为 Java 中的多人游戏实现客户端-服务器系统。我现在处于“和解”部分,并认为使用 aConcurrentSkipListMap可能是最好的数据结构,但我从来没有搞砸过。

我正在努力理解如何有效地使用该类:什么是Big-O操作,哪些操作对于线程访问来说是最快或更安全的,等等。

例如,这里有一段摘录:

public class StateRecords {

    /**
     * The {@link Long} is the Timestamp of the server's generated GameStateDto (Objects here, for simplicity's sake).
     */
    private ConcurrentNavigableMap<Long, Object> localRecord = new ConcurrentSkipListMap<>();

    public StateRecords() {
    }

    public void discardUpTo(Long timestamp) {
        /* 1) One possible way to do it. */
        Long lowerKey = localRecord.lowerKey(timestamp);
        while(lowerKey != null) {
            localRecord.remove(lowerKey);
            lowerKey = localRecord.lowerKey(timestamp);
        }

        /* 2) Another possible way to do it. */
        localRecord.headMap(timestamp).forEach((k,v) -> localRecord.remove(k));

        /* 3) Yet some other solution. */
        localRecord.headMap(timestamp).clear();

        /* 4) I believe that one is wrong. */
        localRecord = localRecord.tailMap(timestamp, true);
    }
}

我试图找出删除所有键低于方法输入的条目的最佳方法。客户端的网络线程和 ui 渲染线程都可以同时访问这个结构(或者至少,这是我目前所想的)。

任何见解都会有所帮助。

4

0 回答 0