2013-06-20 47 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