原始碼閱讀之Ordering

2021-09-03 07:09:33 字數 1649 閱讀 9618

注重greatestof 的演算法實現

舉個栗子:

listlistint = lists.newarraylist(4, 2, 0, 1, 3);

listliststring = lists.newarraylist("abc", "bc", "ab", "ba");

collections.sort(listint, ordering.natural().reverse());

log.info("按照自然序排序後反**{}", listint.tostring());

collections.sort(liststring, ordering.natural());

log.info("字串按照自然序:{}", liststring);

collections.sort(liststring, ordering.usingtostring());

log.info("通過呼叫其tostring()返回的字串進行排序:{}", liststring);

listlisttemp = lists.newarraylist("abc", "bc", "ab", "ba", null);

collections.sort(listtemp, ordering.natural().nullsfirst()/*.nullslast()*/);

log.info("使用當前排序器,但會把空值排在最前(後):{}", listtemp);

log.info("獲取最大的元素:{}", ordering.natural().max(listint)); //獲取最大的元素4 ,需要注意, max 和 min 都是按照當前list的前後為根據。list.get(0)就是最小元素

log.info("獲取最大的元素:{}", ordering.natural().reverse().min(listint));//獲取最小的元素4

log.info("獲取最大的元素:{}", ordering.natural().reverse().max(listint));//獲取最大的元素0

listgreatestkoflistintlist = ordering.natural().greatestof(listint,3);//.leastof(listint,3);

//返回的list是不可變類,如果修改greatestkoflistintlist會拋異常

log.info("listint最大的前{}個元素:{}",3,greatestkoflistintlist);

greatestof 是 通過呼叫reserver().leastof () 來實現。
而且對於k的值在大於 size/2 和 小於size/2 的時候,做了不同處理。

k < size/2 時,呼叫 collections.sort;  k < size 時候,切割list返回,k > size 返回全部list

k > size/2  並且 k >= integer.max_value / 2,同上

k > size/2  並且 k < integer.max_value / 2,

/*維護乙個大小為2*k的緩衝區。每一次緩衝區滿了,找到中間值並圍繞它進行分割槽,保持

*只有最低的k個元素。這需要n/k個查詢-中間和分割槽

*步驟,每一步都需要o(k)時間用傳統的快速選擇排序。

原始碼閱讀 Glide原始碼閱讀之with方法(一)

前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...

原始碼閱讀 Glide原始碼閱讀之load方法(二)

原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 首先,load方法有以下幾個過載方法 public requestbuilder load nullable bitmap bitmap public requestbuilder load nu...

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...