一道面試題引發的思考

2021-09-08 14:03:23 字數 1067 閱讀 1488

首先我們給出這道面試題的**以及題目:

lista = new arraylist(); 

list.add("1");

list.add("2");

for(string item : list)

}

問:上段**執行會報錯嗎?如果把」1」換成「2」會報錯嗎?為什麼?

首先給出答案:

上面這段**執行不會報錯。

把」1」換成「2」再執行就會報錯。

為什麼呢?那麼我們怎麼來發現它背後的秘密呢?答案只有乙個:那就是通過原始碼來解惑(arraylist部分原始碼)。

public e remove(int

index)

public

boolean

remove(object o)

} else

}return

false;}

private

void fastremove(int

index)

/*** an optimized version of abstractlist.itr */

private

class itr implements iterator

@suppresswarnings("unchecked")

public

e next()

public

void

remove()

catch

(indexoutofbound***ception ex)

}final

void

checkforcomodification()

}

我們通過查詢arraylist的原始碼,可以清楚的知道,它的內部是有乙個迭代器類的,然後它的底層其實就是乙個陣列而已。對於要刪除乙個arraylist中的某些元素的時候,我們可以通過遍歷下標,找到要刪除的元素,直接通過下標刪除,或者通過arraylist的迭代器進行刪除,千萬不能直接用foreach遍歷刪除。還有就是遇見問題看到表象要想著去找本質,懂了原理才能知其然知其所以然。

一道面試題引發的思考

好的面試官能夠能好的和面試者互動,而一場好的面試也能帶給面試者更多的思考 面試官給我出題後的 1 分鐘內,我給出了第一種思路 排序。將數字按公升序排序,去除最小的那個數即可。存在問題 時間複雜度高,只考慮了正數的情況。面試官給出了第一次提示時間複雜度過高,要求降低時間複雜度。於是在經過幾分鐘思考後,...

一道面試題的思考

在繼承中new和override相同點和區別?看下面的 有乙個基類a,b1和b2都繼承自a,並且使用不同的方式改變了父類方法print 的行為。測試 輸出什麼?為什麼?public void dotest public class a public class b1 a public class b...

百度一道面試題引發的思考

下面我將寫寫我對這道題的本質思考得到的三種方法 以下方法都對應函式的名字 一 sumget方法 這個題說只有乙個數是重複的,那撇開這個數,也就是說1到100的數都會出現,於是我把所有101個數相加起來,最後再減去1到100的和,不就出來了嗎?二 flagget方法 做標記是乙個好方法。可以建立乙個陣...