![](/img/trans.png)
[英]Which approach is better for finding the frequency of element in an arraylist?
[英]Which approach is better? ArrayList inside static method is confused
我主要擔心的是線程安全,以實現以下場景,我試圖看看是否使用靜態方法比普通對象實例更好,反之亦然。 我讀了一些文章,但我更加困惑。
通常我會創建簡單的靜態方法,將String作為輸入並返回格式化文本。 但由於ArrayList被用作局部變量,我不確定靜態方法是否是正確的選擇,還是應該為它創建普通的對象實例。 由於ArrayList是局部變量,但最好將其設計為成員變量並將類實例化為對象,輸入文本作為成員變量而不是靜態方法?
下面的課是我做的,但不確定我是否應該重寫為非靜態。
public class A {
private static List<Item> parseFreeText(String message){
List<Item> itemList = new ArrayList<Item>();
/*
read message line by line and parse it and build ArrayList and return
itemList.add(item);
*/
return itemList;
}
public static String formattedTextOfItems(String message){
List<Item> itemList = parseFreeText(message);
StringBuilder sb = new StringBuilder();
for(Item item: itemList){
/* format string with item information */
sb.append("ITEM ID: " + item.getId());
}
return sb.toString();
}
在servlet層,它將用作以下內容
String order = A.formattedTextOfItems(req.getParameter("orderText")
請記住: 靜態可被視為良好OO的異常 。
使用靜態方法在類之間引入緊密耦合; 更糟糕的是:你“殺死”多態性; 這是OO的基石之一。
從這個意義上說:默認不是讓事情變得靜止。 例外可以是具有非常明確/明確范圍的輔助/實用程序類。 從這個角度來看你就可以了。
除此之外:不用擔心。 當您擁有多個線程操作的共享數據時,代碼會對線程敏感。 在你的例子中 - 你沒有:調用你的方法的每個線程......將創建自己的列表實例!
含義:如果您的代碼看起來像:
public class A {
private List<String> itemList;
然后,您的不同方法將使用靜態字段; 那么你將面臨多線程問題。 但是您顯示的代碼並不依賴於共享數據 - 因為它沒有使用任何靜態字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.