好吧,這是一個驗證的概念,我有我的頭一直纏着我了好幾天:的Java如何從列表中刪除元素有效
比方說,我有:
List<String> a = new ArrayList<String>();
a.add("foo");
a.add("buzz");
a.add("bazz");
a.add("bar");
for (int i = 0; i < a.size(); i++)
{
String str = a.get(i);
if (!str.equals("foo") || !str.equals("bar")) a.remove(str);
}
這將以列表[「foo」,「bazz」,「bar」]結尾,因爲它會讀取索引1處的字符串(「buzz」),將其刪除,索引2處的字符串(「bazz」)會跳轉到索引1,它會被繞過而不被驗證。
我想出了:
List<String> a = new ArrayList<String>();
a.add("foo");
a.add("buzz");
a.add("bazz");
a.add("bar");
for (int i = 0; i < a.size(); i++)
{
String str = a.get(i);
boolean removed = false;
if (!str.equals("foo") || !str.equals("bar"))
{
a.remove(str);
removed = true;
}
if (removed) i--;
}
應該以這種方式工作(ATLEAST它在我的頭笑),但對於搞亂迭代器是不是真的很好的做法。
我想其他的辦法是建立一個「刪除列表」和添加項目到列表中需要從列表中刪除,但是這將是隻是普通的資源浪費。
那麼,有效地從列表中刪除項目的最佳做法是什麼?
你應該使用Iterator。 –
爲什麼不使用'Set'? – fge
可能是http://stackoverflow.com/questions/2043783/how-to-efficiently-performance-remove-many-items-from-list-in-java?rq=1 – Khaelid