[英]Java clearing a list by creating a new instance
我正在查看Java代碼,發現以下代碼:
list = new ArrayList();
uselist(list);
if (condition)
list = new ArrayList();
與簡單地使用ArrayLists的clear()方法相反,它的用途是什么。
使用new命令清除列表是否可以,並且比清除列表更快嗎?
我正在使用Java 1.6版
不,他們做的不一樣。 方法clear()清除現有列表-仍然引用該列表的任何內容,以后再查看該列表都會發現它是空的。
使用new關鍵字的方法會更改list
變量的值,但不會對現有ArrayList
對象產生任何影響-因此,如果其他任何東西都引用了同一對象,則他們將看不到任何更改。
請注意,清除和重新實例化列表不是同一回事!
考慮以下示例:
a = new ArrayList();
a.add("Hello")
b = a;
a = new ArrayList(); // a is now empty while b contains hello!
與
a = new ArrayList();
a.add("Hello")
b = a;
a.clear(); // Both a and b are now empty.
如果副作用(共享引用)不是問題,那么這只是清除列表的兩種方法。 除非被稱為數百萬次,否則可能不應該是性能問題。
如果該列表在其他地方使用,則調用clear()
可能會導致副作用。 但是,如果不是這種情況,我會說創建一個新列表而不是清除舊列表可能會更快(但是,可能僅適用於大型列表,因為ArrayList
的clear()
只會遍歷元素和集合的它們為null
),但很可能只是編程風格的問題。
是否相同,取決於uselist(...)對列表內部進行的操作。
例如,假設您在uselist中具有以下代碼:
public void uselist(List l) {
this.mylist = l;
}
在這種情況下,您的代碼將創建一個新列表,而不要觸摸this.mylist。 相反,如果您對它調用.clear(),那么您正在清除該相同列表。
這種差異可能是致命的,很難看到。 例如, hibernate
將使用list = new ArrayList()
退出。 然后嘗試更新數據庫中的列表,但是使用clear()休眠時可以正常工作,然后可以看到連接。
clear() // operates on your old object
list = new ArrayList(); // list will be a new object the old will be GCed
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.