我知道这里有人问过这个问题:Java树数据结构?
但是在Java中实现树的最佳实践是什么呢?在上面链接的问题中,投票第二多的答案提到了TreeModel,但在评论中有人说这样做不是很好的编码实践。这是真的吗?(我不理解swing vs非swing)使用TreeModel是常见的做法吗?你所指的注释说:
我会避免在与Swing无关的函数上使用Swing库。这是糟糕的编码实践。您永远不知道Swing是如何实现它们的树的,它们的依赖关系是什么,以及这些在将来会如何变化。Swing不是一个实用程序库,而是一个UI库。
根据我的经验,Swing是一个复杂的UI工具包,但是所有的模型类,如TreeModel
或TableModel
,都是为支持跨平台UI而量身定制的。也许名称模型表明这些封装了那些数据结构的独立内部工作-但是像ButtonModel
这样的类的存在告诉我,所有这些类更多的是为了支持MVC模型。
From the docs:
那么为什么存在模型呢?最大的原因是它们在确定如何存储和检索数据方面为您提供了灵活性。例如,如果您正在设计一个电子表格应用程序,该应用程序在一个稀疏填充的表中显示数据,那么您可以创建自己的表模型,该模型针对这种使用进行了优化。
TreeModel和TreeNode用于实现Swing的可视树组件的模型。你可以在他们的包装上看到这一点,例如javax.swing.tree
。您应该只根据它们的设计使用它们(与ui相关的东西,请参阅Javadocs),而不要将它们用作数据结构。这就是你所说的这句话的意思。这是绝对正确的