請問關於java中list size 0的問題?

時間 2021-06-02 04:50:25

1樓:

說個故事吧,曾經國內某一線網際網路公司做活動送小禮品,判斷禮品剩餘數量==0則活動結束,結果因為併發問題,禮品剩餘數量直接成了負數。事後想來,當初寫成<=0該多好。

2樓:陳毅

首先想問下這個判定條件是在什麼情況下使用

補充下,其他同學說的很有道理。稍微做個補充,判斷list.size() <= 0 是做出了防禦性程式設計,因為list的實現不一定僅有arraylist這種使用陣列的,還會有其他的list實現,甚至是自己的list實現,那麼在這種情況下我們針對介面程式設計

List list = new ? ;

我們不知道這個list的具體實現是什麼。

補上size()的定義

/*** Returns the number of elements in this list. If this list contains

* more than Integer.MAX_VALUE elements, returns

* Integer.MAX_VALUE.

** @return the number of elements in this list

*/由該定義可以看出返回的是節點的數量。

使用list.size() <= 0 (溢位或者其他自定義實現邏輯錯誤,或者某種特殊的list實現會出現負節點數的數量時,例如併發消費者過多,生產者拿了錢還欠著貨的情況:) )做一下特殊處理就很有必要了。

針對與isEmpty。在介面中該函式給出的定義是

* Returns true if this list contains no elements.

** @return true if this list contains no elements

該函式的主要意義在於定義自己的判斷list是否為空的實現。兩個函式語義不同。

一般情況下如ArrayList 或者其他陣列實現的。isEmpty基本滿足需要,但是其他情況下還是需要考慮size <= 0的情況。

關於Java中的ConcurrentHashMap的實現原理有大神可以詳細介紹下嗎?

meteor the張 1.7陣列 hashmap,cas rentrantlock 分段鎖1.8陣列 鍊錶 紅黑樹,synchronized cas 優化版的hashmap luoxn28 可以看下這個 mmwx 沒人講1.8版,那我來講講吧。1.8版本相比1.7版本,沒有了分段鎖的概念,轉而使用...

關於java中throw的疑問?

逗泥丸的平方 你太難為人家了,你知道函式必然異常,但是編譯器只能知道函式宣告了異常。就好像你寫if true,當然現在ide也會提示你,但是這的確沒有也沒必要成為語法錯誤 蔣繼發 你在 Code 中執行 throw new Exception,編譯器在語法檢查階段就確定了第 8 行無法到達,所以提示...

Java中List String a new List 10 這種寫法的元素型別是List嗎?

代林 首先,Number b new Integer 10 並不是建立了乙個value 10的Integer,而是建立了乙個陣列,這個陣列的長度的10,且理論上只能儲存Integer。想要建立乙個value 10的Integer應該是用Number b new Integer 10 同理,List ...