ArrayList retainAll() 仅保留此列表中包含在指定方法参数集合中的元素。其余所有元素都从列表中删除。此方法与 removeAll() 方法完全相反。
在内部,retainAll()
方法遍历 arraylist 的所有元素。对于每个元素,它将元素传递给参数集合的 contains()
方法。
如果在参数集合中找不到元素,它会重新排列索引。如果找到元素,它会将元素保留在后备数组中。
public boolean retainAll(Collection<?> c) { Objects.requireNonNull(c); return batchRemove(c, true); } private boolean batchRemove(Collection<?> c, boolean complement) { final Object[] elementData = this.elementData; int r = 0, w = 0; boolean modified = false; try { for (; r < size; r++) if (c.contains(elementData[r]) == complement) elementData[w++] = elementData[r]; } finally { // Preserve behavioral compatibility with AbstractCollection, // even if c.contains() throws. if (r != size) { System.arraycopy(elementData, r, elementData, w, size - r); w += size - r; } if (w != size) { // clear to let GC do its work for (int i = w; i < size; i++) elementData[i] = null; modCount += size - w; size = w; modified = true; } } return modified; }
方法参数 – 包含要从此列表中保留的元素的集合。
方法返回 – true
如果此列表因此更改
方法抛出 – ClassCastException
如果此列表的元素类与指定集合不兼容。如果此列表包含空元素并且指定的集合不允许空元素,它也可能抛出 NullPointerException
。
Java 程序使用 retainAll()
方法保留列表中存在于指定参数集合中的所有元素。
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; public class ArrayListExample { public static void main(String[] args) throws CloneNotSupportedException { ArrayList<String> alphabets = new ArrayList<>(Arrays.asList("A", "B", "A", "D", "A")); System.out.println(alphabets); alphabets.retainAll(Collections.singleton("A")); System.out.println(alphabets); } }
程序输出。
[A, B, A, D, A] [A, A, A]
以上就是 Java 中的 ArrayList retainAll() 方法。
快乐学习!!
更多参考:
Java ArrayList 指南
ArrayList Java 文档
标签2: Java ArrayList地址:https://www.cundage.com/article/arraylist-retainall-example.html