1. 程式人生 > >關於ArrayList.remove()的一些你沒注意的細節

關於ArrayList.remove()的一些你沒注意的細節

這是我在程式設計中遇到的問題,當時以為是BUG,後來才發現原來是ArrayList.remove(int index)方法的一些小細節

廢話不多說,先上程式碼

<pre name="code" class="java">ArrayList<Integer> list=new ArrayList<>();
ArrayList<Integer> list1=new ArrayList<>();
for(int i=0;i<10;i++){
list.add(i);
}
for(int i=0;i<10;i++){
list1.add(i);
}
System.out.println(list);
list.remove(list1.get(6));
System.out.println(list);

我相信大家這程式碼肯定能看懂

那麼你們覺得輸出會是什麼呢?

第一個輸出為:5,6,7,8,9,10,11,12,13,14

第二個輸出為:5,7,8,9,10,11,12,13,14

是不是跟想象中的結果不太一樣,本來會以為刪除索引為6的值,沒想到是輸出了刪除了元素為6的值

那麼如何才能根據索引來刪除值呢,只需要前面加一個轉化(int),即

<pre name="code" class="java">ArrayList<Integer> list=new ArrayList<>();
ArrayList<Integer> list1=new ArrayList<>();
for(int i=0;i<10;i++){
list.add(i);
}
for(int i=0;i<10;i++){
list1.add(i);
}
System.out.println(list);
list.remove((int)list1.get(6));
System.out.println(list);
就可以根據索引刪除,那麼我想說明什麼呢?

即ArrayList中的remove()方法,能根據Int型別進行查詢索引刪除,而不能想當然的把Integer也當做int來進行查詢,如果來用。必須通過強制轉化來實現。

這個小細節可能大家不會注意到,所以在這分享出來,我當時也是想當然的認為用Integer型別也可以查詢,最後沒有刪除,希望這個能幫助到你們。