List .remove()的一個小細節


不廢話,先上代碼:

  

ArrayList<Integer> col = new ArrayList<Integer>();  
System.out.println("Initial size: " + col.size());  
for(int i = 0; i < 20; i++)  
    col.add(i + 10);  
 

 

顯然,上面這段代碼再簡單不過了,建立一個Interger類型參數的ArrayList.

於是考慮到要從ArrayList刪除兩個元素,比如10, 25。初步設想的代碼如下:

  

col.remove(10);  
col.remove(25);  

 

 

   基於這種設想的原因是,既然ArrayList<Integer>里的類型是Integer,我傳入一個int的應該可以自動實現autoboxing.那么,如果和設想的一樣,col中的10和25兩個元素都被刪除了。

實際運行的結果不然:

 

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 25, Size: 20

at java.util.ArrayList.rangeCheck(ArrayList.java:604)

at java.util.ArrayList.remove(ArrayList.java:445)

at CollectionBasics.main(CollectionBasics.java:54)

 

從錯誤中間可以看到,提示的是訪問數組索引越界了。怎么會這樣呢?很顯然,傳入的10,25被當成索引而不是要移除的元素。
察看java doc里面才發現,里面有兩個remove方法,分別定義如下: 
public E remove(int index);  
  
public boolean remove(Object o);  

 

 
當我們傳入int類型的時候,會自動被當成上面那個方法來調用。而下面那個移除某個特定元素的方法是需要傳入一個Object對象。所以,為了移除制定的元素而不至於引起混淆的話,可以將傳入的int先封裝一下:
 
col.remove((Integer)10);  
col.remove((Integer)25);  

 

    這樣結果就對了。

 

 

 

在北京呆了半年,也有了自己的經驗。
第一:剛開始找工作的時候,不能把自己放的太低,要有自己的最低底線,不能說工資隨便給,要有自己的目標。因為起點越低以后越難爬。 有些公司的hr就不喜歡隨隨便便看不清自己的人。所以,第一份工作要有自己的最低額度,轉正之后要比實習工資翻個1.5倍。
第二:感覺需要調漲工資的時候, 就提出來,不要猶豫,因為可能老板早就有這個念頭,但是你沒提,老板干嘛要給你漲。提出來是必須的,不管失敗與成功,如果失敗了,老板也會重新看待你這個人,覺得你這個人不是樂於現在的工作狀況。
第三、要漲工資的時候,老板一般會問,你想要多少。所以事前要有一個期望工資和最低工資,如果老板聽了你的期望工資,一口答應,那就好事;但是,如果老板講價還價,不能低於你的最低工資。因為你沒有期望工資,只跟老板說了你的最低工資,老板一聽就同意了,你肯定會后悔當初怎么沒多要。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM