Bak*_*562 1 java string arraylist
我有一个StringList的String数组,它被添加到这样:
List<String[]> data = new ArrayList<>();
data.add(new String[] {var, lex, valor});
Run Code Online (Sandbox Code Playgroud)
当试图擦除其中一个String数组时,输出是false出于某种原因.这是我删除它的方式:
data.remove(new String[] {var, lex, valor});
Run Code Online (Sandbox Code Playgroud)
我也试过删除使用位置,方法如下:
public void eliminarPos(String var, String lex, String valor, Integer ii) {
boolean uno = data.remove(ii);
System.out.println(uno);
}
Run Code Online (Sandbox Code Playgroud)
上述方法的输出是false.有没有办法成功从ArrayList中删除String数组?
如果你看看Javadocs,你会发现有两种不同的重载方法remove.一个采用Object,另一个采用原始整数作为位置:
remove
public E remove(int index)删除此列表中指定位置的元素.将任何后续元素向左移位(从索引中减去一个).
上面取一个原始整数,下面取一个Object:
remove
public boolean remove(Object o)从此列表中删除指定元素的第一个匹配项(如果存在).如果列表不包含该元素,则不变...
你看到的原因false是因为你提供了原语的包装类int.Integer是一个Object,因此Java使用的方法与您调用它的方式非常相似,在这种情况下,您使用Object参数调用.然后Java使用方法签名remove(Object o),并且由于IntegerArrayList中不存在指定的,因此返回false.
现在,后者失败的原因是您创建了一个新的String数组,因此创建了一个新实例.由于new String[] { var, lex, valor }并且new String[] { var, lex, valor }不是引用相等,Java在ArrayList中找不到相同的Object,并且不会删除该项.解决方案是使用原语int:
public void eliminarPos(String var, String lex, String valor, int ii) {
String[] uno = data.remove(ii); //Make sure to use String[], as different types are returned
System.out.println(uno);
}
Run Code Online (Sandbox Code Playgroud)
然后,Java将使用接受原始整数的方法,因为您传递了一个原始整数.你看到的原因incompatible types: String[] cannot be converted to boolean是因为在指定的位置remove(int index)返回实际的Object,或者删除了对象,而不是boolean像remove(Object o).
| 归档时间: |
|
| 查看次数: |
1552 次 |
| 最近记录: |