繁体   English   中英

ArrayList或哈希集

[英]ArrayList or Hashset

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?

通常,您会希望使用ArrayList作为查询参数-因为顺序很重要。 当您只有一个参数(如此处所示)时,这不是问题-但我绝对会使用一个列表来保持一致性。

至于使用StringBuffer ,这里没有显示您正在使用sql做什么。 如果您不追加任何其他内容,则可以使用简单的String ...,但不会将其添加到ArrayList ,因为它是查询本身,而不是查询参数

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

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

至于性能,请考虑:

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

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

更高效:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM