好吧,这是一个验证的概念,我有我的头一直缠着我了好几天:的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