[英]Removing an element from a List<String[]> not working as expected
我有一個String數組的ArrayList像這樣添加:
List<String[]> data = new ArrayList<>();
data.add(new String[] {var, lex, valor});
嘗試擦除String數組之一時,由於某種原因,輸出為false
。 這是我刪除它的方法:
data.remove(new String[] {var, lex, valor});
我也嘗試過使用位置刪除,方法如下:
public void eliminarPos(String var, String lex, String valor, Integer ii) {
boolean uno = data.remove(ii);
System.out.println(uno);
}
上面方法的輸出為false
。 有什么方法可以成功地從ArrayList中刪除String數組嗎?
如果您看一下Javadocs ,就會發現有兩種不同的重載方法可供remove
。 一個使用對象,另一個使用原始整數作為位置:
remove
public E remove(int index)
刪除此列表中指定位置的元素。 將所有后續元素向左移動(從其索引中減去一個)。
上面帶一個原始整數,下面帶一個對象:
remove
public boolean remove(Object o)
如果存在指定元素,則從該列表中刪除該元素的第一次出現。 如果列表不包含該元素,則它保持不變...
看到false
的原因是因為您提供了原始int
的包裝器類。 Integer
是一個Object ,因此Java使用與調用它的方式最相似的方法,在這種情況下,您使用Object參數進行調用。 Java然后使用方法簽名remove(Object o)
,並且由於指定的Integer
在ArrayList中不存在,因此它返回false
。
現在,后者失敗的原因是您創建了一個新的String數組,從而創建了一個新實例。 由於new String[] { var, lex, valor }
和new String[] { var, lex, valor }
在引用上不相等,因此Java在ArrayList中找不到相同的對象,因此不會刪除該項目。 解決方案是使用原始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);
}
然后,Java將使用接收原始整數的方法,因為您傳遞了原始整數。 之所以看到incompatible types: String[] cannot be converted to boolean
是因為remove(int index)
在指定的位置返回實際的Object ,或者被刪除的對象,而不是像remove(Object o)
那樣的boolean
。
data.remove(new String[]{var, lex, valor});
永遠不會工作,因為即使數組包含相同的東西,它們也不相等,並且在列表中也找不到數組。
public void eliminarPos(String var, String lex, String valor, Integer ii) {
boolean uno=data.remove(ii);
System.out.println(uno);
}
將不起作用,因為您將其傳遞給Integer
而不是int
。 Integer
是一個對象,因此它正在列表中搜索該對象。 更改為:
public void eliminarPos(String var, String lex, String valor, int ii) {
data.remove(ii);
}
按字符串remove
數組將不起作用,因為list.remove
在對象上調用equals()
。 在array.equals的情況下,它只是引用比較( ==
)。
按位置刪除作品,您必須將正確的索引指定為原始int
。
public void eliminarPos(String var, String lex, String valor, int ii) {
String[] uno=data.remove(ii);
System.out.println(uno);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.