正確地從List <Integer>中刪除整數這是我剛剛遇到的一個很好的陷阱??紤]一個整數列表:List<Integer> list = new ArrayList<Integer>();list.add(5);list.add(6);list.add(7);list.add(1);對你執(zhí)行時會發(fā)生什么的任何有根據的猜測list.remove(1)?怎么樣list.remove(new Integer(1))?這可能會導致一些令人討厭的錯誤。在處理整數列表時,區(qū)分remove(int index)哪個元素從給定索引remove(Object o)中刪除元素以及通過引用刪除元素的正確方法是什么?這里要考慮的要點是提到的@Nikita - 精確參數匹配優(yōu)先于自動裝箱。
3 回答

守著一只汪
TA貢獻1872條經驗 獲得超4個贊
Java總是調用最適合您的參數的方法。僅當沒有可以在沒有強制/自動裝箱的情況下調用的方法時,才會執(zhí)行自動裝箱和隱式向上轉換。
List接口指定了兩個remove方法(請注意參數的命名):
remove(Object o)
remove(int index)
這意味著list.remove(1)
刪除位置1處的對象并remove(new Integer(1))
從此列表中刪除指定元素的第一個匹配項。

qq_遁去的一_1
TA貢獻1725條經驗 獲得超8個贊
你可以使用鑄造
list.remove((int) n);
和
list.remove((Integer) n);
如果n是int或Integer并不重要,該方法將始終調用您期望的那個。
使用(Integer) n
或Integer.valueOf(n)
比new Integer(n)
前兩個更有效可以使用Integer緩存,而后者將始終創(chuàng)建一個對象。

MM們
TA貢獻1886條經驗 獲得超2個贊
我不知道'正確'的方式,但你建議的方式工作得很好:
list.remove(int_parameter);
刪除給定位置的元素和
list.remove(Integer_parameter);
從列表中刪除給定的對象。
這是因為VM首先嘗試查找使用完全相同的參數類型聲明的方法,然后才嘗試自動裝箱。
添加回答
舉報
0/150
提交
取消