自己实现的JAVA版ZSet的主要功能,源码在github:

https://github.com/zhangga/JAVAZSet

hBs35t.md.png

性能测试:

下面数据都是在本地windows下执行10次的评价值:JVM10G + i7-8700开着各种应用。Eclipse Run 预热几次稳定后。

ZSet使用TreeMap、list的组合存放分值信息。100W条总数据,分值为1W(0-9999)个,这样平均相同分值会有100条数据在list中。

获取1000-3000分值的数据,执行1W次,

取样10次用时ms:6604+6490+6648+6602+7718+7626+6682+7498+6588+7358=69814/10=6981

ZSet使用ConcurrentSkipListMap、list的组合存放分值信息。100W条总数据,分值为1W(0-9999)个,这样平均相同分值会有100条数据在list中。

获取1000-3000分值的数据,执行1W次,

取样10次用时ms:7594+8279+8622+8476+7810+7397+7241+8579+8019+8554=80571/10=8057

ZSet不需要线程安全的情形下使用TreeMap的效率会更高点。

获取高度方法性能测试:

1.使用ZSet获取附近的障碍物,判断是否在障碍物内,获取障碍物高度。

测试用例,在一处放置11个圆形障碍物,搜索2米范围内的障碍物,获取高度。100W次测试,用时在450ms-500ms之间。

2.使用一个正常地图(37号场景)的navmesh数据,recast的获取高度。100W次测试,用时在1000ms-1100ms之间。