您好,登錄后才能下訂單哦!
如何實現一種兼容Set的無序以及List的可重復的數據結構,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
Java 中,提供了很多常用的數據結構。比如,Map、List、Set 等。但是,在很多時候,我們可能需要統計某個數據出現的次數,這時往往我們的實現代碼可能如下所示:
如果在多個項目,或者是一個項目中,有多個方法,多個功能需要這種統計功能。那么能不能把這種實現,抽取成一個新的數據結構,方便我們在任何地方使用?這就是本文所要說的,一種兼容Set的無序,List的可重復的數據結構:Multiset。
這個問題,有可能你在面試中也會被問到。因為數據結構,看似最枯燥,但它具有最長久的生命力。
Guava 類庫中提供了一種兼容 Set 的無序,List 的可重復的數據結構 Multiset。Multiset 底層還是數據結構,它就相當于對我們上面的代碼進行了封裝。同時也算是對 Java 中數據結構的一種擴展。
當使用 Multiset 后,我們的代碼就變得非常的簡單了。我們只需存放,而最終的出現次數,重復次數,只需要通過 count 方法就可以獲得,非常的方便。
同時 Multiset 還提供了 setCount(E, int) 方法,可以修改元素 E 在 Multiset 中的次數,但是不能把元素出現的次數修改為負數和大于 Integer.MAX_VALUE 的值,否則將會拋出異常。
Multiset 中的幾個特點,可以總結如下:
Multiset 中的元素出現的次數只能為正數,前面說了原因。
如果E的出現次數為 0,那么 E 將不出現在 multiset中,是不能在 elementSet() 和 entrySet() 的視圖中。
multiset.size() 返回這個集合的大小,相當于在 multiset 中元素的出現的總數。
如果想得到 multiset 中不同元素出現的總數,可以利用 elementSet().size() 來實現。
multiset.iterator() 可以遍歷 Multiset 中的所有元素,所以 iteratior 遍歷的次數就等于 multiset.size()。
Multiset 支持添加、刪除元素,設置元素出現的次數;
setCount(elem, 0) 相當于移除 elem 的所有元素。
multiset.count(elem) 方法中的 elem 如果沒有出現在 Multiset 中,那么它的返回值永遠都是 0。
關于如何實現一種兼容Set的無序以及List的可重復的數據結構問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。