簡體   English   中英

從列表中刪除元素 <String[]> 不能按預期工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM