我正忙于在窗格上绘制节点的练习。我的第一个目标是使用 100 万个节点,然后将其增加到 1500 万个。
我有一个自定义对象图,我可以向这个对象添加边和节点。每个节点对象都有一个椭圆,我可以调用和绘制它,并且与边缘对象相同。目前我有一个为节点生成随机位置的函数。
我目前正在使用滚动窗格来启用窗格周围的平移并查看所有节点。
我认为一个好主意是使用哈希图
Map<String, ArrayList<Node>> mapX = new HashMap<String, ArrayList<Node>>();
Map<String, ArrayList<Node>> mapY = new HashMap<String, ArrayList<Node>>();
我使用以下代码将节点添加到哈希图中:
int tempXFloor = (int)Math.floor(tempX);
ArrayList<Node> tempList = mapX.get(tempXFloor+"");
if(tempList == null){
tempList = new ArrayList<>();
}
tempList.add(node);
mapX.put(tempXFloor+"",tempList);
然后,当我平移时,我得到当前位置,将其放置并检查地图中是否存在条目。如果存在条目,我将 ArrayList 中的所有节点添加到 nodesOnScreen。nodesOnScreen 是一个 ArrayList 类型,我将在平移时将节点添加到该列表中,同样,屏幕外的节点将从 nodesOnScreen 变量中删除。
我只绘制 ArrayList nodesOnScreen 中的节点。
我将不胜感激在这件事上的一些指导,以及如何处理这样的大数据结构。我是朝着正确的方向前进还是我错过了一个明显的“技巧”来做到这一点。