我有一個問題。當我嘗試將「相同」對象兩次添加到ArrayList時發生了什麼。對於「相同」,我的意思是一個單獨的類的對象,它被標識爲與equals()和hashCode()相同。它對於大多數成員變量具有不同的值,並且可能是由不同的線程創建的,但對於equals()和hashCode()它是「相同的」。 第二個對象是否替換第一個對象?ArrayList - 添加「相同」的對象(same => equals,hashCode),線程
此外,如果兩個線程嘗試將這些對象同時完全添加到ArrayList會發生什麼?這甚至有可能嗎?如果是,會發生什麼?
謝謝! :-)
[編輯]感謝所有的答案!我應該使用synchronizedList,而不是使用「synchronize(list){}」? - >我讀了文檔,甚至與synchronizedList,迭代同步(列表)將被使用
[EDIT2] 一個synchronizedList可以被聲明爲成員變量嗎?我嘗試了,但它沒有奏效。
-1每個對'ArrayList.contains'的調用都是O(n)。這是創建獨特列表的一種可怕方式。 'LinkedHashSet'對此更好。 – 2011-05-26 12:24:49
但是當使用LinkedHashSet訪問它時必須同步,是否正確?那爲什麼不使用synchronizedList呢? – nano7 2011-05-26 12:45:55
@ nano7,當然它必須是同步的。僅僅因爲您更改了收集並不意味着您更改了同步策略。你可以自由地使用你想要的任何同步數據結構,但是如果你打算使用'LinkedHashSet',我建議使用'synchronizedSet'。 – mre 2011-05-26 12:53:01