2013-06-20 61 views
-1

HashMap中有JTable与下列内容创建基于的JTable

Col1 | Col2 
A  | 1 
A  | 2 
A  | 3 
B  | 5 
B  | 1 
C  | 5 
C  | 4 
C  | 2 

基于该表中,我需要创建一个HashMap numbers:第1列是指键和第2栏是指数据。

下面我提供了我的代码片段。问题是:有没有更快的方法来创建所提到的HashMap?

HashMap numbers = new HashMap<String, List<String>>(); 

for (int i=0; i<tbNumbers.getRowCount(); i++) 
{ 
    col1 = mdNumbers.getValueAt(i,0).toString(); 
    col2Array = new ArrayList<String>(); 

    for (int j=0; j<tbNumbers.getRowCount(); j++) 
    { 
     if (mdNumbers.getValueAt(j,0).toString() == col1) 
     { 
     col2Array.add(mdNumbers.getValueAt(j,1).toString()); 
     } 
    } 

    numbers.put(col1, col2Array); 

} 
+1

有一个完整的例子[这里](http://stackoverflow.com/a/ 9134371/230513)为'Map '。 – trashgod

回答

1

是的,也许让HashMap做的工作,而不是使用嵌套循环。

HashMap numbers = new HashMap<String, List<String>>(); 
List col2Array=null; 
for (int i=0; i<tbNumbers.getRowCount(); i++) 
{ 
    col1 = mdNumbers.getValueAt(i,0).toString(); 
    col2Array = numbers.get(col1); 
    if(col2Array==null){ 
     col2Array=new ArrayList<String>(); 
     numbers.put(col1,col2Array); 
    } 
    col2Array.add(mdNumbers.getValueAt(i,1).toString()); 
} 
+0

如果您可以依赖表格的顺序,查找col1值的更改可能会更快。 –

1

如果你有几个c0l1相同COL2值,可以提高一点点你的算法:

HashMap numbers = new HashMap<String, List<String>>(); 

for (int i=0; i<tbNumbers.getRowCount(); i++) 
{ 
    col1 = mdNumbers.getValueAt(i,0).toString(); 
    List col2Array=null; 

    col2Array = numbers.get(col1); 
    if (col2Array==null) { 
     col2Array=new ArrayList<String>(); 
    } 
    col2Array.add(mdNumbers.getValueAt(j,1).toString()); 
} 
+0

在这种情况下,在每次迭代中,我应该创建一个新的List col2Array。它是否正确? –

+0

您只会为新的col1值创建新的'List'对象。对于重复的,你将使用现有的'List'对象。 – SeniorJD

+0

如果你可以保证col1值相等,算法可以改进一点:) – SeniorJD