在遍历JDBC ResultSet时使用ArrayList或LinkedList



这是一个关于在遍历JDBC ResultSet对象时需要使用哪种列表来累积数据的一般性问题。

我为一个项目工作,其中某些查询返回数千条记录。SQL查询使用JDBC方法执行,结果值通过ResultSet循环执行。SQL查询生成一个排序的顺序。

List<Company> list = new ArrayList<>();
ResultSet rs = statement.execute();
while (rs.next()){ 
Company company = new Company();
rs.getString("company_name");
rs.getInteger("company_id");
list.add(company);
}

此列表返回到服务层,数据绑定通过JAXB或Jackson ObjectMapper完成,将其转换为XML格式或JSON对象,并作为REST调用的一部分返回。

有大约200个这样的代码片段,其中使用ArrayList来累积结果数据。

查询:由于每次添加一个新的数据项时,列表都会在结构上进行修改,那么使用LinkedList而不是ArrayList会有什么不同吗?其中哪一个可以用来提高性能?

注意,在应用程序的其他地方不能操作列表。数据在数据层插入,在服务层转换。

ArrayList可能是这个用例的最佳选择。

如果您需要更多的性能,您应该使用分析器来确定瓶颈。我敢打赌,增加读取大小将对提高性能产生最大的影响。见https://docs.oracle.com/cd/A87860_01/doc/java.817/a83724/resltse5.htm

@tgdavies关于直接流到JSON的评论是一个很好的评论。避免创建中间数据结构将显著提高性能。缺点是,这将是您的应用程序的API更改,这可能是一个官僚的过程,需要很长时间来协调。

另一个选项是根据返回的平均记录数预分配ArrayList,但只有当分析器认为这是一个问题时,你才应该这样做。

最新更新