2013-06-20 5 views
-1

에 따라의 HashMap를 작성하는 것은이 테이블을 바탕으로 다음과 같은 내용JTable의

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

JTable있다, 내가 만들 필요가 HashMap numbers : 1 열 키를 참조하고 열이 데이터를 의미합니다.

다음은 제 코드를 제공합니다. 질문 : 언급 된 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