Java 如何在SWT/Swing表中高效地填充数百万条记录

Java 如何在SWT/Swing表中高效地填充数百万条记录,java,algorithm,swing,swt,Java,Algorithm,Swing,Swt,这是一个一般性的问题,但我有一个特殊的场景- 我正在通过JNI层从硬件设备获取记录,它给了我数百万条/大量的记录,而在SWT表中处理所有这些记录就像在墙上乱七八糟,它只是崩溃了 为了高效编程,我使用了ScrollBar,我使用了UI 将wrt大小设置为滚动条,然后填充大量特定数据, 然后再次移动滚动条时,再次设置下一组数据,但我 意识到这根本不是一个有效的方法,因为在每一个动作上 滚动条,我通过JNI层调用硬件 非常昂贵的方式 所以现在我有一点时间来更新逻辑。 请给我提供一些有效的算法 没有任何

这是一个一般性的问题,但我有一个特殊的场景- 我正在通过JNI层从
硬件设备获取记录,它给了我数百万条/大量的记录,而在SWT表中处理所有这些记录就像在墙上乱七八糟,它只是崩溃了

为了高效编程,我使用了ScrollBar,我使用了UI 将wrt大小设置为滚动条,然后填充大量特定数据, 然后再次移动滚动条时,再次设置下一组数据,但我 意识到这根本不是一个有效的方法,因为在每一个动作上 滚动条,我通过JNI层调用硬件 非常昂贵的方式

所以现在我有一点时间来更新逻辑。 请给我提供一些有效的算法

没有任何分页策略,只有一个垂直滚动条,直到最后一条记录


百万只是一个数字,它不是强制性的有百万记录。我只想知道一些有效的算法来填充大量的记录,我想说的是,你可以使用某种数据存储来高效地表示你的数据。取决于数据,但自定义对象数组也可以。然后你把它包装成你自己的习惯,让Swing来处理剩下的事情。未显示的数据应该不需要任何资源。

如果我没记错的话,
JTable
的一个“问题”是它在整个模型上循环以计算列的大小。因此,即使使用滚动条,它在第一次绘制时也会在整个模型(而不仅仅是可视化的部分)上循环


SwingX的
JXTable
允许在列上设置原型值(
tableColumnText#setPrototypeValue
),从而避免此循环。设置此值可以显著缩短表的创建时间。

为什么有人希望有这样一个包含数百万条记录的表?无论如何,你都无法滚动浏览它的内容,那么用例是什么呢?我从一个硬件设备上获取日志跟踪,所以那些N个数字的设备。。。。请不要固守百万这个词。。。如果批量记录比数组多,或者任何可用的java集合都无法处理,则如何高效地填充它,因为这些集合确实有一定的限制data@bunta,如果您甚至无法将数据保存在内存中,则该问题与您如何向用户呈现数据无关。在这种情况下,存储在中的一些可能会有所帮助。但是一百万个对象应该远远超出了需要进行此类破解的限制。我希望也可以使用
JTable
解决这个问题,或者提供
ColumnModel
,或者让模型最初只暴露几行,然后在计算列宽后再添加其他行。不过,我在这方面没有任何经验。
setAutoResizeMode(AUTO\u RESIZE\u OFF)
也可能有用。