private BTTableModel() { btArray = new float[6][]; for (int i = 0; i < btArray.length; i++) { btArray[i] = new float[80 * 10000]; for (int k = 0; k < btArray[i].length; k++) { btArray[i][k] = (float) Math.random(); } } } public int getRowCount() { return btArray[0].length; } public int getColumnCount() { return btArray.length + 1; } public Object getValueAt(int rowIndex, int columnIndex) { if (columnIndex == 0) { return new Integer(rowIndex + 1); } return new Float(btArray[columnIndex-1][rowIndex]); } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } }
public static void main(String[] args) { JTable table = new JTable(new BTTableModel()); JScrollPane sp = new JScrollPane(table); JFrame f = new JFrame(); f.getContentPane().add(sp, BorderLayout.CENTER); f.setSize(800, 600); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.show(); System.out.println(table.getRowCount()); } }80万行,每行7列,重要的是要自己写一个存储数据效率高的TableModel,不要用DefaultTableModel Swing的可伸缩性和扩展性还是很不错的。
Float对象就很难说了,一般java里面是得不到一个对象占用的空间大小的
1 use StringBuffer instead of String
2 log
你这里除了Float会占用内存空间外,TableModel占用的空间更多。JTable再设置tablemodel的时候还会不会消耗额外空间那就不清楚了。
总之80万记录你能一次显示出来,用户也看不过来
TableModel 默认处理时,使用的 JLabel 来显示文本(具体可以看看 DefaultTableModel 的JDK文档,里面有个 方法让你来设置 文本的颜色和字体等属性的,就是先获得一个 JLabel 对象,然后再进行设置的)。jvm -xms 没有不安全啊。不就是设置堆的最大容量吗??
默认下 ,jvm -xms 64M
其实Swing还是有显示这么多数据的能力的,不信的话请试一试这个:import java.awt.BorderLayout;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;public class BT
{
private static class BTTableModel extends AbstractTableModel {
private float[][] btArray = null;
private BTTableModel()
{
btArray = new float[6][];
for (int i = 0; i < btArray.length; i++) {
btArray[i] = new float[80 * 10000];
for (int k = 0; k < btArray[i].length; k++) {
btArray[i][k] = (float) Math.random();
}
}
} public int getRowCount()
{
return btArray[0].length;
} public int getColumnCount()
{
return btArray.length + 1;
} public Object getValueAt(int rowIndex, int columnIndex)
{
if (columnIndex == 0) {
return new Integer(rowIndex + 1);
}
return new Float(btArray[columnIndex-1][rowIndex]);
} public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
} public boolean isCellEditable(int rowIndex, int columnIndex)
{
return false;
}
}
public static void main(String[] args)
{
JTable table = new JTable(new BTTableModel());
JScrollPane sp = new JScrollPane(table);
JFrame f = new JFrame();
f.getContentPane().add(sp, BorderLayout.CENTER);
f.setSize(800, 600);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.show(); System.out.println(table.getRowCount());
}
}80万行,每行7列,重要的是要自己写一个存储数据效率高的TableModel,不要用DefaultTableModel
Swing的可伸缩性和扩展性还是很不错的。