vik*_*vde 40 java collections arraylist
我有ArrayList,我想从中删除一个具有特殊价值的元素......
例如.
ArrayList<String> a=new ArrayList<String>();
a.add("abcd");
a.add("acbd");
a.add("dbca");
Run Code Online (Sandbox Code Playgroud)
我知道我们可以迭代arraylist和.remove()方法来删除元素,但我不知道如何在迭代时这样做.如何删除值为"acbd"的元素,即第二个元素?
And*_*s_D 61
在您的情况下,不需要遍历列表,因为您知道要删除哪个对象.你有几个选择.首先,您可以通过索引删除对象(因此,如果您知道,该对象是第二个列表元素):
a.remove(1); // indexes are zero-based
Run Code Online (Sandbox Code Playgroud)
然后,您可以删除字符串的第一个出现:
a.remove("acbd"); // removes the first String object that is equal to the
// String represented by this literal
Run Code Online (Sandbox Code Playgroud)
或者,删除具有特定值的所有字符串:
while(a.remove("acbd")) {}
Run Code Online (Sandbox Code Playgroud)
如果您的集合中有更复杂的对象并且想要删除具有特定属性的实例,则会更复杂一些.因此,您无法通过使用remove与要删除的对象相同的对象来删除它们.
在这种情况下,我通常使用第二个列表来收集我要删除的所有实例,并在第二遍中删除它们:
List<MyBean> deleteCandidates = new ArrayList<>();
List<MyBean> myBeans = getThemFromSomewhere();
// Pass 1 - collect delete candidates
for (MyBean myBean : myBeans) {
if (shallBeDeleted(myBean)) {
deleteCandidates.add(myBean);
}
}
// Pass 2 - delete
for (MyBean deleteCandidate : deleteCandidates) {
myBeans.remove(deleteCandidate);
}
Run Code Online (Sandbox Code Playgroud)
And*_*ejs 24
单线程(java8):
list.removeIf(s -> s.equals("acbd")); // removes all instances, not just the 1st one
Run Code Online (Sandbox Code Playgroud)
(隐含所有迭代)
npi*_*nti 12
你需要像这样使用Iterator:
Iterator<String> iterator = a.iterator();
while(iterator.hasNext())
{
String value = iterator.next();
if ("abcd".equals(value))
{
iterator.remove();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
话虽这么说,您可以使用ArrayList类提供的remove(int index)或remove(Object obj).但是请注意,在迭代循环时调用这些方法会导致ConcurrentModificationException,因此这将不起作用:
for(String str : a)
{
if (str.equals("acbd")
{
a.remove("abcd");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
但这会(因为你没有迭代循环的内容):
a.remove("acbd");
Run Code Online (Sandbox Code Playgroud)
如果您有更复杂的对象,则需要覆盖equals方法.
对于java8,我们可以简单地使用removeIf函数
listValues.removeIf(value -> value.type == "Deleted");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
143850 次 |
| 最近记录: |