这是我刚刚遇到的一个很好的陷阱.考虑一个整数列表:
List<Integer> list = new ArrayList<Integer>();
list.add(5);
list.add(6);
list.add(7);
list.add(1);
Run Code Online (Sandbox Code Playgroud)
对你执行时会发生什么的任何有根据的猜测list.remove(1)?怎么样list.remove(new Integer(1))?这可能会导致一些令人讨厌的错误.
在处理整数列表时,区分remove(int index)哪个元素从给定索引remove(Object o)中删除元素以及通过引用删除元素的正确方法是什么?
当我在Java中使用ArrayList时,有一些我不理解的东西.这是我的初始化代码:
ArrayList<Integer> list = new ArrayList <Integer> ();
list.add (0);
list.add (1);
Run Code Online (Sandbox Code Playgroud)
有时我需要通过索引删除一个对象:
list.remove (0) // delete the object in the first box
Run Code Online (Sandbox Code Playgroud)
但有时我想通过其内容删除一个对象:
list.remove (0) // delete the object HAS Which value of 0
Run Code Online (Sandbox Code Playgroud)
这段代码很模糊.为了澄清我想在代码中做什么,我指定这样的类型:
list.remove ((Object) 0) // delete the object which has a value of 0
Run Code Online (Sandbox Code Playgroud)
如果我不AC,唯一知道调用哪些方法的方法是将鼠标指针放在方法上看:java.util.ArrayList.remove boolean(Object object)
Java但它如何产生差异?是否有方法指针?是否有一种不那么模糊的方式来做到这一点?
非常感谢,对不起我的英语.
PS:我应该说我最终使用了SparseIntArray,但我很好奇
Java 8 引入了 Lambdas,它允许我们有效地从 List 中删除所有元素。以下内容从 中删除 2 的所有实例myList。
List<Integer> myList;
...
myList.removeIf(x -> x==2);
Run Code Online (Sandbox Code Playgroud)
如果我想删除 N 个元素(在本例中为三个),我将使用for循环。
for (int i = 0; i < 3; i++) {
myList.remove(Integer.valueOf(2));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用 Lambda 从列表中删除指定数量的元素?如果是这样,它是否比for循环代码更有效?
java ×3
android ×1
arraylist ×1
collections ×1
integer ×1
java-8 ×1
lambda ×1
list ×1
overloading ×1