我认为 CardLayout 使用 HashMap 来存储其对(面板和关联的字符串标识符),但是查看 CardLayout 类,我注意到它实际上使用了 Vector。我是这样理解的:当调用 show
方法时,它会循环遍历 vector 的内容,使用 equals
检查以查明这是否是适当卡的名称,如果是,则它会循环遍历容器的所有面板以找出当前可见的面板,将其隐藏,然后显示相应的卡片。
如果我正在制作一个具有很多不同面板的 GUI 应用程序,那么翻转到所需面板不是一种缓慢的技术吗?我是否应该更好地使用自己的方式显示面板,例如将它们存储到数组中并手动使用 add
/remove
或 setVisible
而不是使用 CardLayout ?这实际上是我在最终使用 CardLayout 之前一开始使用的方式。
最佳答案
这永远不会成为问题:您通常不会非常频繁地在组件之间切换,当您这样做时,扫描具有少量组件(通常是 3-100?)的列表是与必须发生的其他操作(例如绘制新组件)相比,花费的时间可以忽略不计。从性能角度来看,数据结构的选择基本上是无关的 - 您可以使用链接列表,但没有人会注意到。
另请注意,HashMap 不适合 CardLayout,因为它需要保留卡片的顺序,以便您可以first
/下一个
/上一个
等等
所以基本上,不要担心,也不要浪费时间来滚动你自己的 CardLayout 克隆 - CardLayout 工作得很好。
关于java - CardLayout性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12610911/