2017-04-04 12 views
2

VectorよりもArrayListを使用する方がよいでしょうか? すべてのVector値に対してArrayListのコードを変更しようとしましたが、myTableModelメソッドの最後のreturn文にエラーが発生しました代わりに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。スレッドセーフな実装が必要ない場合は、Vectorの代わりにArrayListを使用することをお勧めします。"](https://docs.oracle.com/javase) /7/docs/api/java/util/Vector.html) – domsson

+2

'new DefaultTableModel(data、colNames);'これにはベクトルが必要です。 arrayListで動作しません – XtremeBaumer

答えて

0

あなたは物事が間違っています:誰かがこれを言ったと聞いたので、あなたはこのクラスまたはそのクラスを選択しません。特定のクラスを選択すると、の意味はになります。それはあなたの仕事を完了するのに役立つからです。

例:そのDefaultTableModelのjavadocを参照すると、そのクラスはではありません。は、ArrayListを受け入れるコンストラクタを提供します!したがって:あなたのコードを変更する必要はありません。ときあなたのコードのの目標は、このようなDefaultTableModelオブジェクトを作成することです!

他の回答が正しく指摘しているように、答えは「より多くの」機能を持つクラスを使用しないことがあります。あなたの問題を注意深く見ること。動的ベクトルを固定長配列で置き換えることさえできます。彼らは仕事をするから!

しかし、ステップバックするとき。一般的な話をしています:Vectorの代わりにArrayListを使用すると、いくつかの利点があります。 2017年に。あなたが新しいコードを書く時。あなたの "デフォルト"はVectorの代わりにList/ArrayListを使うことでしょう。

+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

関連する問題