我有一个面试问题(简短且易于理解):
我需要构建一个文件系统。
我需要创建一个文件对象,比如说它有一个id。
我需要创建一个目录,它有一个id和一些辅助数据。
我不能使用任何java.util.Collections并且需要自己创建所有数据结构。
问题是找到最优的目录层次结构实现。
我需要实现的函数有:addDirectory(parentDirectoryId)、removeDirectory(DirectoryId)、printAll() - 按逻辑方式打印文件夹和文件的层次结构。
我想到的方法是先有一个根目录Directories,然后在其下方放置文件和子目录。 这个实现的具体方法是,每个目录D都有一个列表记录所有直接子目录,同时每个目录也有一个列表记录其直接或间接的子目录ID集合 - 因此,如果我想要删除一个目录,我会遍历其子Dids列表,并检查它是否存在。如果存在,则会继续往下遍历子目录,直到找到我想要删除的目录为止。 问题在于,使用这种实现方式,我需要递归地更新id列表,这一点非常麻烦。因为每次添加或删除之后,我都需要返回上一级并更新列表。而且,运行时间可能不高效,因为如果我的树非常宽且深,并且我需要删除或添加的目录正好位于整个树的叶子节点,则我需要遍历整棵树才能完成操作。
请帮我找到更好的DirectoryFile系统实现方法。我可以自由选择实现方式,但时间非常紧迫。我提出的树结构只是一个想法,我卡在这上面了。
我想到的方法是先有一个根目录Directories,然后在其下方放置文件和子目录。 这个实现的具体方法是,每个目录D都有一个列表记录所有直接子目录,同时每个目录也有一个列表记录其直接或间接的子目录ID集合 - 因此,如果我想要删除一个目录,我会遍历其子Dids列表,并检查它是否存在。如果存在,则会继续往下遍历子目录,直到找到我想要删除的目录为止。 问题在于,使用这种实现方式,我需要递归地更新id列表,这一点非常麻烦。因为每次添加或删除之后,我都需要返回上一级并更新列表。而且,运行时间可能不高效,因为如果我的树非常宽且深,并且我需要删除或添加的目录正好位于整个树的叶子节点,则我需要遍历整棵树才能完成操作。
请帮我找到更好的DirectoryFile系统实现方法。我可以自由选择实现方式,但时间非常紧迫。我提出的树结构只是一个想法,我卡在这上面了。
c
,唯一需要更新的是c
的父目录。哦,不对,你说它两者都有;算了吧。嗯,好运——还剩1分45秒。 - Dave Newton