2017-04-04 91 views
2

ArrayList比Vector更好用嗎? 我試過將代碼更改爲ArrayList以獲取所有Vector值,但在我的myTableModel方法結束時返回語句時出現錯誤如何使用ArrayList代替

編輯:澄清我聽過並閱讀過幾個人提到的用法2017年的矢量差(而且ArrayList是首選)。不過真正的新的Java,所以我的想法顯然不是它應該是(由其他用戶明確指出):)

public static DefaultTableModel myTableModel(){ 
     csvData = new Vector(); 
    readInData(); 
    String header = csvData.get(0); 
    String[] columns = header.split("[,]"); 
    Vector<String> colNames = new Vector<>(); 
    int columnCount = columns.length; 
    for (int column = 0; column < columnCount; column++) { 
     colNames.add(columns[column]); 
    } 
    Vector<Vector<Object>> data = new Vector<>(); 


    for(int j = 1 ; j < csvData.size() ; j++){ 
     String row = csvData.get(j); 
     String[] elements = row.split("[,]"); 
      Vector<Object> vector = new Vector<>(); 
     for (int columnIndex = 0; columnIndex < columnCount; columnIndex++) { 
      vector.add(elements[columnIndex]); 
     } 
     data.add(vector); 
    } 

    return new DefaultTableModel(data, colNames); 
+4

要解決你的第一個問題:[「Vector is synchronized。如果不需要線程安全的實現,建議使用ArrayList來代替Vector。」](https://docs.oracle.com/javase /7/docs/api/java/util/Vector.html) – domsson

+2

'new DefaultTableModel(data,colNames);'這需要一個向量。不適用於arrayList – XtremeBaumer

回答

0

你錯了:你不選擇這個或那個班,因爲你聽到有人說這個或那個。你決定選擇某個班級,因爲它讓感覺。因爲它可以幫助你完成工作。

例如:當你轉向javadoc的那個DefaultTableModel你會發現:那個類沒有而不是提供了一個接受ArrayList的構造函數!因此:不需要改變你的代碼;當你的代碼的目標是創建這樣一個DefaultTableModel對象!

因此,正如另一個答案指出的那樣:有時答案不是使用具有「更多」特徵的類;但要仔細研究你的問題;甚至用固定大小的數組替換動態向量。因爲他們做這份工作!

但是當退後時;並在一般的談話:是的,使用ArrayList而不是Vector有許多優點;並於2017年;當你寫新的代碼;你的「默認」是使用List/ArrayList而不是Vector。

+0

謝謝,這個評論真的符合我心目中的地方,謝謝。 – MrDon

1

簡單!

public static DefaultTableModel myTableModel() { 
    String[] csv = readInData(); 
    String[] columnNames = csv[0].split(","); 
    Object[][] data = new Object[csv.length - 1][]; 

    for (int row = 1; row < data.length; row++) 
     data[row] = csv[row].split(","); 

    return new DefaultTableModel(data, columnNames); 
} 
+0

您可能只想談談您的代碼正在做什麼。是的,這是簡單的代碼,但仍然:代碼只有答案是不理想的! – GhostCat