如何减少循环次数?

这是我的第一个问题,我已尝试遵循发布规则,如果我有任何错误,请让我知道如何改进。

无论如何,我一直使用BestFit处理内存分配和释放。 分配现在可以正常工作,但是,我收到的反馈是存在不必要的for循环,并且分配应该使用一种算法(如果有大量数据)工作。我的问题是我该如何更改代码,以便所有事情都在一种算法中完成,而不是拥有三个for循环?

指针是指向内存中地址的类。空闲列表是具有位置和内存的节点的链接列表。这是我的分配方法:

       @Override
    public Pointer alloc(int size) {
        int pointerAdress = 0;
       for (int i = 0; i < freeList.size(); i++) {
        for (Node n : freeList) {   //Looks for a node that's big enough
            if (n.getMemory() >= size) {
                bestNode = n;
                pointerAdress = bestNode.getPosition();
                break;
            }
            if (n.equals(freeList.getLast())) {
                System.out.println("No node has enough free memory-space");
                return null;
            }
        }

            Node n = freeList.get(i);
            if (n.getMemory() == size) {        //If this node's space equals the size = this node is the best fit
                bestNode = n;
                pointerAdress = bestNode.getPosition();
                break;

                //If the node has a space that's big enough, and is smaller than best fit
            } else if (n.getMemory() >= size && n.getMemory() < bestNode.getMemory()) {
                pointerAdress = bestNode.getPosition();
            }
        }

        allocated.put(pointerAdress, size);

        for (int i = 0; i<freeList.size(); i++) {
            if (freeList.get(i).getPosition() == pointerAdress) {
                freeList.get(i).decreaseFreeMemory(size);
                if (freeList.get(i).getMemory() == 0) {
                    freeList.remove(i);
                }
                break;
            }
        }
        return new Pointer(pointerAdress, this);
    }
评论