

javaで配列data[任意][3]のようなものをArraylistで取り扱いたいと思うのですがどのようにすればよいでしょうか？二次元配列の方法を調べてみましたが今一つ理解できませんでした。


CC BY-SA 3.0
2016-06-07T00:15:21.227
26519
2016-09-19T06:23:57.893
9782
question
java
ArrayListを用いた配列の取り扱い


SQLクエリの実行結果の1レコードを表す配列を `ArrayList` に詰める、ということであれば次の`results`のようになります。

[code]

    final ResultSet rs = stmt.executeQuery(sql);
    
    final List <Object[]> results = new ArrayList<>();
    while (rs.next()) {
        final Object[] r = new Object[3];
    
        r[0] = rs.getString(1); // code
        r[1] = rs.getString(2); // name
        r[2] = rs.getBigDecimal(3); // price
    
        results.add(r);
    }
    
[/code]

配列を使うことが必須ではないのであれば、[harry0000さんのコメント](https://ja.stackoverflow.com/questions/26519/arraylist%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E9%85%8D%E5%88%97%E3%81%AE%E5%8F%96%E3%82%8A%E6%89%B1%E3%81%84#comment25321_26519)にあるように、実行結果の1レコードを表すクラスを定義してそれを用いる方法もあります。

[code]

    public class Product {
        private String code;
        private String name;
        private BigDecimal price;
    
        public Product(final String code, final String name, final BigDecimal price) {
            this.code = code;
            this.name = name;
            this.price = price;
        }
        // setter/getter省略
    }
    
[/code]

実行:

[code]

    final ResultSet rs = stmt.executeQuery(sql);
    
    final List <Product> results = new ArrayList<>();
    while (rs.next()) {
        final Product r = new Product(rs.getString(1), rs.getString(2), rs.getBigDecimal(3));
    
        results.add(r);
    }
    
[/code]

配列でなくクラスで扱うことのメリットとしては、取り扱うべき要素が明確になることが挙げられます。  
配列の場合、code, name,
priceを配列の添え字で判別する必要があったり、必要に応じて正しく`Object`型をダウンキャストする必要が出てきます。  
(用途が本当に`JTable`に表示することのみであれば、そのようなメリットは必要ではないかもしれませんが。)


CC BY-SA 3.0
2016-06-08T02:08:59.047
26550
2016-06-08T02:22:01.737
2016-06-08T02:22:01.737
2808
2808
26519
answer