Java 用于基本文件系统的数据结构

Java 用于基本文件系统的数据结构,java,data-structures,hashtable,binary-tree,Java,Data Structures,Hashtable,Binary Tree,我正在练习一些面试问题,我发现了一个有趣的问题,那就是构建一个基本的文件系统/终端。因为这是一个面试问题,所以这个文件系统可能是一个基本的系统,包括添加文件和目录,以及在目录中添加文件和目录。另一个功能是以逻辑方式打印所有目录和文件。这一切都必须在不使用集合库的情况下完成 我很好奇我将使用什么样的数据结构来实现这个文件系统?我想到的不是一个哈希表,就是一个B树 哈希表将是一个非常快速的查找时间。但是,它会占用大量内存。我打算用素数作为我的桶大小 B树的内存效率要高得多。但是,查找时间会较慢 或者

我正在练习一些面试问题,我发现了一个有趣的问题,那就是构建一个基本的文件系统/终端。因为这是一个面试问题,所以这个文件系统可能是一个基本的系统,包括添加文件和目录,以及在目录中添加文件和目录。另一个功能是以逻辑方式打印所有目录和文件。这一切都必须在不使用
集合
库的情况下完成

我很好奇我将使用什么样的数据结构来实现这个文件系统?我想到的不是一个
哈希表
,就是一个
B树

哈希表将是一个非常快速的查找时间。但是,它会占用大量内存。我打算用素数作为我的桶大小

B树的内存效率要高得多。但是,查找时间会较慢

或者两者都有可能

例:

所有文件都存储在
hashtable
节点中,而目录存储在树节点中,该树节点可以分支到其他目录节点或hashtable


我还有一个问题:哪一个更容易编码或实现“全部打印”功能?

文件系统的最佳数据结构是树。如果您想一想,它自然会对目录结构的层次结构建模

dir1
  dir2
    dir2a
      file2b
  dir3
    dir3a
      file3b
      file3c
      dir4
        file4a

B树更接近实际使用的内容,NTFS使用它。虽然缓存通常是在操作系统中实现的文件系统之上的一层,但一些散列可能可以用来提高性能,特别是在缓存方面。这与其说是一个特定的编程问题,不如说是一个“算法策略”问题。对于文件系统,您需要了解您可能需要的使用类型。。。每个目录中是否可以有大量文件;名字可以有多长;有关文件大小的信息;权限的处理……如果在您提出问题时被问到“设计一个简单的文件系统”,那么您可能会开始问一些智能问题,这样您就可以实际设计一些对所需功能和性能有意义的东西。真正的文件系统会进行各种性能权衡:速度、空间开销、ACID属性、日志恢复和取证日志记录等。我想问的问题是,您是否了解问题空间,而不一定是选择哪种数据结构的固定答案。哈希表将是一个非常糟糕的主意。如果有人要求您列出
“foo\bar”
目录中的所有文件,您必须搜索所有键。这将是一个O(n)操作。