ArrayList或Hashset

时间:2010-09-27 09:24:53

标签: java

ArrayList queryParms = new ArrayList();
StringBuffer sql = new StringBuffer();
sql.append(
"SELECT A.FLDREC_NUM, " +
"@CHARDATE(A.FLDDATE), " +
"T.FLDDESCR, @DEC(A.FLDLEVEL,3) " +
" FROM @SCHEMAALCOHOL A LEFT OUTER JOIN @SCHEMADRUGCAUS T " +
" ON A.FLDREASON = T.FLDCODE " +
" WHERE A.FLDEMPLOYEE = ? " +
" ORDER BY A.FLDDATE DESC"
);
queryParms.add(new Long(empRec));
  1. 我可以使用HashSet而不是上面的ArrayList,它在性能方面是否有意义?

  2. 查询的作用是什么,我们是否需要在StringBuffer中追加查询。为什么我不能直接添加到ArrayList?

3 个答案:

答案 0 :(得分:1)

通常,您可能希望使用ArrayList作为查询参数 - 因为顺序很重要。如果您只有一个参数(就像您在这里一样),这不是问题 - 但我肯定会使用列表来保持一致性。

至于使用StringBuffer - 你还没有在这里展示你对sql所做的事情。如果您没有附加任何其他内容,则可以使用简单的String ...但您不会将其添加到ArrayList,因为它是查询本身,而不是查询参数

最后,我建议使用泛型,例如

ArrayList<Long> queryParameters = new ArrayList<Long>();

答案 1 :(得分:1)

至于表现,请考虑:

  1. 使用未同步但不是问题的StringBuilder(而不是StringBuffer),因为您正在为每个请求创建一个新的StringBuilder()。如果它是用于每个请求的相同语句,则它应该是全局声明的最终字符串。

  2. 根据Jon的建议,将ArrayList与Generics一起使用。 queryParams用作QueryService实现的一部分,用于查询DB。看起来,它是一个预编译的SQL查询,查询参数的顺序在运行时很重要。 HashSet不保证订单。

答案 2 :(得分:0)

效率更高:

sql.append("SELECT A.FLDREC_NUM, ");
sql.append("@CHARDATE(A.FLDDATE), ");
......