簡體   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